feat: deploy дописывает HEARTBEAT_INTERVAL при отсутствии в конфиге (2.0.6-SAC)
Явная проверка ключей в /etc/ssh-monitor.conf, блок 240 мин + watchdog; исправлен текст startup heartbeat. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+2
-2
@@ -7,7 +7,7 @@ IFS=$'\n\t'
|
|||||||
# ============================================
|
# ============================================
|
||||||
|
|
||||||
CONFIG_FILE="/etc/ssh-monitor.conf"
|
CONFIG_FILE="/etc/ssh-monitor.conf"
|
||||||
SSH_MONITOR_VERSION="2.0.5-SAC"
|
SSH_MONITOR_VERSION="2.0.6-SAC"
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
if [ -f "$SCRIPT_DIR/sac-client.sh" ]; then
|
if [ -f "$SCRIPT_DIR/sac-client.sh" ]; then
|
||||||
@@ -1968,7 +1968,7 @@ send_startup_notification() {
|
|||||||
message="${message}🚫 Автоблокировка IP: выключена (ENABLE_IP_BAN=0), только уведомления"$'\n'
|
message="${message}🚫 Автоблокировка IP: выключена (ENABLE_IP_BAN=0), только уведомления"$'\n'
|
||||||
fi
|
fi
|
||||||
message="${message}⚪ Белый список: ${whitelist_count} IP/подсетей"$'\n'
|
message="${message}⚪ Белый список: ${whitelist_count} IP/подсетей"$'\n'
|
||||||
message="${message}❤️ Heartbeat будет отправляться каждые 12 часов"$'\n'
|
message="${message}❤️ Heartbeat будет отправляться каждые ${HEARTBEAT_INTERVAL_MINUTES} мин (SAC agent.heartbeat)"$'\n'
|
||||||
message="${message}📢 Каналы уведомлений (все по списку): $(notify_chain_human)"
|
message="${message}📢 Каналы уведомлений (все по списку): $(notify_chain_human)"
|
||||||
message="$(message_ensure_server_line "$message")"
|
message="$(message_ensure_server_line "$message")"
|
||||||
|
|
||||||
|
|||||||
+59
-8
@@ -170,24 +170,75 @@ set_config_kv() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config_key_exists() {
|
||||||
|
local key="$1" file="$2"
|
||||||
|
grep -qE "^[[:space:]]*${key}=" "$file" 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
append_heartbeat_interval_block() {
|
||||||
|
local file="$1"
|
||||||
|
{
|
||||||
|
printf '\n# --- SAC agent.heartbeat (интервал в минутах; %s = 4 ч) ---\n' "$EXPECTED_HEARTBEAT_INTERVAL_MINUTES"
|
||||||
|
printf 'HEARTBEAT_INTERVAL_MINUTES="%s"\n' "$EXPECTED_HEARTBEAT_INTERVAL_MINUTES"
|
||||||
|
printf '# Порог watchdog: интервал + 1 ч запас (%s с)\n' "$EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE"
|
||||||
|
printf 'WATCHDOG_MAX_HEARTBEAT_AGE="%s"\n' "$EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE"
|
||||||
|
} >>"$file"
|
||||||
|
}
|
||||||
|
|
||||||
sync_heartbeat_interval_config() {
|
sync_heartbeat_interval_config() {
|
||||||
local file="$CONFIG_FILE"
|
local file="$CONFIG_FILE"
|
||||||
local current_interval current_watchdog
|
local current_interval current_watchdog
|
||||||
|
local changed=0
|
||||||
|
local backed_up=0
|
||||||
|
|
||||||
[ -f "$file" ] || return 1
|
[ -f "$file" ] || return 1
|
||||||
|
|
||||||
current_interval=$(config_conf_value "HEARTBEAT_INTERVAL_MINUTES" "$file" 2>/dev/null || true)
|
backup_config_once() {
|
||||||
current_watchdog=$(config_conf_value "WATCHDOG_MAX_HEARTBEAT_AGE" "$file" 2>/dev/null || true)
|
if [ "$backed_up" -eq 0 ]; then
|
||||||
|
cp "$file" "${file}.bak.$(date +%Y%m%d_%H%M%S)" 2>/dev/null || true
|
||||||
|
backed_up=1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
if [ "$current_interval" = "$EXPECTED_HEARTBEAT_INTERVAL_MINUTES" ] \
|
if ! config_key_exists "HEARTBEAT_INTERVAL_MINUTES" "$file"; then
|
||||||
&& [ "$current_watchdog" = "$EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE" ]; then
|
backup_config_once
|
||||||
|
if ! config_key_exists "WATCHDOG_MAX_HEARTBEAT_AGE" "$file"; then
|
||||||
|
append_heartbeat_interval_block "$file"
|
||||||
|
log_message "INFO" "Config $file: добавлены HEARTBEAT_INTERVAL_MINUTES=$EXPECTED_HEARTBEAT_INTERVAL_MINUTES и WATCHDOG_MAX_HEARTBEAT_AGE=$EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE (отсутствовали в конфиге)."
|
||||||
|
else
|
||||||
|
set_config_kv "HEARTBEAT_INTERVAL_MINUTES" "$EXPECTED_HEARTBEAT_INTERVAL_MINUTES" "$file"
|
||||||
|
log_message "INFO" "Config $file: добавлен HEARTBEAT_INTERVAL_MINUTES=$EXPECTED_HEARTBEAT_INTERVAL_MINUTES (отсутствовал в конфиге)."
|
||||||
|
fi
|
||||||
|
changed=1
|
||||||
|
else
|
||||||
|
current_interval=$(config_conf_value "HEARTBEAT_INTERVAL_MINUTES" "$file" 2>/dev/null || true)
|
||||||
|
if [ "$current_interval" != "$EXPECTED_HEARTBEAT_INTERVAL_MINUTES" ]; then
|
||||||
|
backup_config_once
|
||||||
|
set_config_kv "HEARTBEAT_INTERVAL_MINUTES" "$EXPECTED_HEARTBEAT_INTERVAL_MINUTES" "$file"
|
||||||
|
log_message "INFO" "Config $file: HEARTBEAT_INTERVAL_MINUTES ${current_interval:-?} → $EXPECTED_HEARTBEAT_INTERVAL_MINUTES (deploy policy)."
|
||||||
|
changed=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! config_key_exists "WATCHDOG_MAX_HEARTBEAT_AGE" "$file"; then
|
||||||
|
backup_config_once
|
||||||
|
set_config_kv "WATCHDOG_MAX_HEARTBEAT_AGE" "$EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE" "$file"
|
||||||
|
log_message "INFO" "Config $file: добавлен WATCHDOG_MAX_HEARTBEAT_AGE=$EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE (отсутствовал в конфиге)."
|
||||||
|
changed=1
|
||||||
|
else
|
||||||
|
current_watchdog=$(config_conf_value "WATCHDOG_MAX_HEARTBEAT_AGE" "$file" 2>/dev/null || true)
|
||||||
|
if [ "$current_watchdog" != "$EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE" ]; then
|
||||||
|
backup_config_once
|
||||||
|
set_config_kv "WATCHDOG_MAX_HEARTBEAT_AGE" "$EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE" "$file"
|
||||||
|
log_message "INFO" "Config $file: WATCHDOG_MAX_HEARTBEAT_AGE ${current_watchdog:-?} → $EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE (deploy policy)."
|
||||||
|
changed=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$changed" -eq 0 ]; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
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
|
if [ "$DEPLOY_MODE" -eq 1 ]; then
|
||||||
say_info "Heartbeat: ${EXPECTED_HEARTBEAT_INTERVAL_MINUTES} мин, watchdog ${EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE} с."
|
say_info "Heartbeat: ${EXPECTED_HEARTBEAT_INTERVAL_MINUTES} мин, watchdog ${EXPECTED_WATCHDOG_MAX_HEARTBEAT_AGE} с."
|
||||||
fi
|
fi
|
||||||
|
|||||||
+1
-2
@@ -1,2 +1 @@
|
|||||||
2.0.5-SAC
|
2.0.6-SAC
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user