feat: heartbeat 4h via HEARTBEAT_INTERVAL_MINUTES (2.0.2-SAC)
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+10
-2
@@ -7,7 +7,7 @@ IFS=$'\n\t'
|
||||
# ============================================
|
||||
|
||||
CONFIG_FILE="/etc/ssh-monitor.conf"
|
||||
SSH_MONITOR_VERSION="2.0.1-SAC"
|
||||
SSH_MONITOR_VERSION="2.0.2-SAC"
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
if [ -f "$SCRIPT_DIR/sac-client.sh" ]; then
|
||||
@@ -51,6 +51,8 @@ MAIL_SMTP_SSL="0"
|
||||
# Конфигурация логов
|
||||
LOG_FILE="/var/log/ssh_monitor.log"
|
||||
LAST_HEARTBEAT_FILE="/var/log/last_heartbeat.txt"
|
||||
# Интервал SAC agent.heartbeat (минуты). 240 = 4 ч.
|
||||
HEARTBEAT_INTERVAL_MINUTES=240
|
||||
LAST_REPORT_FILE="/var/log/last_daily_report.txt"
|
||||
DAILY_REPORT_ENABLED=1
|
||||
DAILY_REPORT_HOUR=9
|
||||
@@ -183,6 +185,7 @@ load_config() {
|
||||
local cfg_backup_webhook_url="${BACKUP_WEBHOOK_URL}"
|
||||
local cfg_log_file="${LOG_FILE}"
|
||||
local cfg_last_heartbeat_file="${LAST_HEARTBEAT_FILE}"
|
||||
local cfg_heartbeat_interval_minutes="${HEARTBEAT_INTERVAL_MINUTES:-240}"
|
||||
local cfg_last_report_file="${LAST_REPORT_FILE}"
|
||||
local cfg_daily_report_enabled="${DAILY_REPORT_ENABLED:-1}"
|
||||
local cfg_daily_report_hour="${DAILY_REPORT_HOUR}"
|
||||
@@ -243,6 +246,10 @@ load_config() {
|
||||
BACKUP_WEBHOOK_URL="${BACKUP_WEBHOOK_URL:-$cfg_backup_webhook_url}"
|
||||
LOG_FILE="${LOG_FILE:-$cfg_log_file}"
|
||||
LAST_HEARTBEAT_FILE="${LAST_HEARTBEAT_FILE:-$cfg_last_heartbeat_file}"
|
||||
HEARTBEAT_INTERVAL_MINUTES="${HEARTBEAT_INTERVAL_MINUTES:-$cfg_heartbeat_interval_minutes}"
|
||||
if ! [[ "${HEARTBEAT_INTERVAL_MINUTES:-240}" =~ ^[0-9]+$ ]] || [ "${HEARTBEAT_INTERVAL_MINUTES:-0}" -lt 1 ]; then
|
||||
HEARTBEAT_INTERVAL_MINUTES=240
|
||||
fi
|
||||
LAST_REPORT_FILE="${LAST_REPORT_FILE:-$cfg_last_report_file}"
|
||||
LAST_SSH_CHECK_FILE="${LAST_SSH_CHECK_FILE:-$cfg_last_ssh_check_file}"
|
||||
LAST_SUDO_CHECK_FILE="${LAST_SUDO_CHECK_FILE:-$cfg_last_sudo_check_file}"
|
||||
@@ -1911,8 +1918,9 @@ check_heartbeat() {
|
||||
local current_epoch
|
||||
current_epoch=$(date '+%s')
|
||||
local diff=$((current_epoch - last_heartbeat_epoch))
|
||||
local heartbeat_interval_sec=$((HEARTBEAT_INTERVAL_MINUTES * 60))
|
||||
|
||||
if [ "$last_heartbeat_epoch" -eq 0 ] || [ "$diff" -ge 43200 ]; then
|
||||
if [ "$last_heartbeat_epoch" -eq 0 ] || [ "$diff" -ge "$heartbeat_interval_sec" ]; then
|
||||
send_heartbeat
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ IFS=$'\n\t'
|
||||
CONFIG_FILE="/etc/ssh-monitor.conf"
|
||||
WATCHDOG_LOG_FILE="/var/log/ssh_monitor_watchdog.log"
|
||||
LAST_HEARTBEAT_FILE="/var/log/last_heartbeat.txt"
|
||||
WATCHDOG_MAX_HEARTBEAT_AGE=5400
|
||||
WATCHDOG_MAX_HEARTBEAT_AGE=18000
|
||||
WATCHDOG_SERVICE_NAME="ssh-monitor.service"
|
||||
WATCHDOG_NOTIFY_ON_RECOVERY="0"
|
||||
|
||||
|
||||
@@ -49,6 +49,8 @@ MAIL_SMTP_SSL="0"
|
||||
|
||||
LOG_FILE="/var/log/ssh_monitor.log"
|
||||
LAST_HEARTBEAT_FILE="/var/log/last_heartbeat.txt"
|
||||
# Интервал SAC agent.heartbeat (минуты). 240 = 4 ч.
|
||||
HEARTBEAT_INTERVAL_MINUTES="240"
|
||||
LAST_REPORT_FILE="/var/log/last_daily_report.txt"
|
||||
LAST_SSH_CHECK_FILE="/var/log/last_ssh_check"
|
||||
LAST_SUDO_CHECK_FILE="/var/log/last_sudo_check"
|
||||
@@ -102,7 +104,8 @@ PROMETHEUS_TEXTFILE_DIR=""
|
||||
# JSON-снимок состояния на каждой итерации (timestamp, hostname, dry_run). Пусто — отключено.
|
||||
HEALTHCHECK_STATUS_FILE=""
|
||||
|
||||
WATCHDOG_MAX_HEARTBEAT_AGE="5400"
|
||||
# Порог устаревания heartbeat для watchdog (сек): интервал + 1 ч запас (240 мин → 18000).
|
||||
WATCHDOG_MAX_HEARTBEAT_AGE="18000"
|
||||
WATCHDOG_LOG_FILE="/var/log/ssh_monitor_watchdog.log"
|
||||
WATCHDOG_SERVICE_NAME="ssh-monitor.service"
|
||||
WATCHDOG_NOTIFY_ON_RECOVERY="0"
|
||||
|
||||
@@ -24,6 +24,8 @@ SUMMARY_UPDATER="—"
|
||||
|
||||
CONFIG_FILE="/etc/ssh-monitor.conf"
|
||||
DEPLOY_INSTALL_PATH="/opt/scripts/update_ssh_monitor.sh"
|
||||
EXPECTED_HEARTBEAT_INTERVAL_MINUTES=240
|
||||
EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE=$((EXPECTED_HEARTBEAT_INTERVAL_MINUTES * 60 + 3600))
|
||||
SAC_SPOOL_DIR_DEFAULT="/var/lib/ssh-monitor/sac-spool"
|
||||
SYSTEMD_UNIT_PATH="/etc/systemd/system/ssh-monitor.service"
|
||||
|
||||
@@ -155,6 +157,40 @@ ensure_ssh_monitor_config_from_example() {
|
||||
return 0
|
||||
}
|
||||
|
||||
set_config_kv() {
|
||||
local key="$1" val="$2" file="$3"
|
||||
if grep -qE "^[[:space:]]*${key}=" "$file" 2>/dev/null; then
|
||||
sed -i -E "s/^[[:space:]]*${key}=.*/${key}=\"${val}\"/" "$file"
|
||||
else
|
||||
printf '%s="%s"\n' "$key" "$val" >>"$file"
|
||||
fi
|
||||
}
|
||||
|
||||
sync_heartbeat_interval_config() {
|
||||
local file="$CONFIG_FILE"
|
||||
local current_interval current_watchdog
|
||||
|
||||
[ -f "$file" ] || return 1
|
||||
|
||||
current_interval=$(config_conf_value "HEARTBEAT_INTERVAL_MINUTES" "$file" 2>/dev/null || true)
|
||||
current_watchdog=$(config_conf_value "WATCHDOG_MAX_HEARTBEAT_AGE" "$file" 2>/dev/null || true)
|
||||
|
||||
if [ "$current_interval" = "$EXPECTED_HEARTBEAT_INTERVAL_MINUTES" ] \
|
||||
&& [ "$current_watchdog" = "$EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
cp "$file" "${file}.bak.$(date +%Y%m%d_%H%M%S)" 2>/dev/null || true
|
||||
set_config_kv "HEARTBEAT_INTERVAL_MINUTES" "$EXPECTED_HEARTBEAT_INTERVAL_MINUTES" "$file"
|
||||
set_config_kv "WATCHDOG_MAX_HEARTBEAT_AGE" "$EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE" "$file"
|
||||
log_message "INFO" "Config $file: HEARTBEAT_INTERVAL_MINUTES=$EXPECTED_HEARTBEAT_INTERVAL_MINUTES, WATCHDOG_MAX_HEARTBEAT_AGE=$EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE (deploy policy on script upgrade)."
|
||||
if [ "$DEPLOY_MODE" -eq 1 ]; then
|
||||
say_info "Heartbeat: ${EXPECTED_HEARTBEAT_INTERVAL_MINUTES} мин, watchdog ${EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE} с."
|
||||
fi
|
||||
CONFIG_CHANGED=1
|
||||
return 0
|
||||
}
|
||||
|
||||
sync_use_sac_fallback_mode() {
|
||||
local file="$CONFIG_FILE"
|
||||
[ -f "$file" ] || return 1
|
||||
@@ -968,6 +1004,7 @@ update_script() {
|
||||
|
||||
if [ "$script_changed" -eq 1 ]; then
|
||||
sync_use_sac_fallback_mode || true
|
||||
sync_heartbeat_interval_config || true
|
||||
fi
|
||||
|
||||
if [ "$script_changed" -eq 1 ] || [ "${SAC_CLIENT_CHANGED:-0}" -eq 1 ] || [ "${CONFIG_CHANGED:-0}" -eq 1 ]; then
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
2.0.1-SAC
|
||||
2.0.2-SAC
|
||||
|
||||
Reference in New Issue
Block a user