diff --git a/agent/deploy/netpulse-agent.init b/agent/deploy/netpulse-agent.init index 3c20db27..8e4e8697 100644 --- a/agent/deploy/netpulse-agent.init +++ b/agent/deploy/netpulse-agent.init @@ -54,7 +54,19 @@ selfheal_binary() { return 0 } + +# (#879) self-heal: tras un sysupgrade /etc sobrevive pero el binario del +# watchdog no: si quedó la entrada de cron del antiguo watchdog, retirarla +# (cron loguearía un comando inexistente cada 2 min). +cleanup_stale_watchdog_cron() { + [ -f /usr/sbin/netpulse-watchdog ] && return 0 + crontab -l 2>/dev/null | grep -q netpulse-watchdog || return 0 + ( crontab -l 2>/dev/null | grep -v netpulse-watchdog ) | crontab - 2>/dev/null || true + logger -t netpulse-agent "watchdog cron huérfano retirado (#879)" +} + start_service() { + cleanup_stale_watchdog_cron selfheal_binary || logger -t netpulse-agent "self-heal: no se pudo restaurar el binario" procd_open_instance netpulse-agent procd_set_param command "$BIN" diff --git a/deploy/openwrt/netpulse-agent/files/netpulse-agent.init b/deploy/openwrt/netpulse-agent/files/netpulse-agent.init index 23250904..84a18763 100644 --- a/deploy/openwrt/netpulse-agent/files/netpulse-agent.init +++ b/deploy/openwrt/netpulse-agent/files/netpulse-agent.init @@ -60,7 +60,19 @@ load_config() { [ -n "$server_fp" ] && export NETPULSE_SERVER_FP="$server_fp" } + +# (#879) self-heal: tras un sysupgrade /etc sobrevive pero el binario del +# watchdog no: si quedó la entrada de cron del antiguo watchdog, retirarla +# (cron loguearía un comando inexistente cada 2 min). +cleanup_stale_watchdog_cron() { + [ -f /usr/sbin/netpulse-watchdog ] && return 0 + crontab -l 2>/dev/null | grep -q netpulse-watchdog || return 0 + ( crontab -l 2>/dev/null | grep -v netpulse-watchdog ) | crontab - 2>/dev/null || true + logger -t netpulse-agent "watchdog cron huérfano retirado (#879)" +} + start_service() { + cleanup_stale_watchdog_cron load_config # Validación mínima diff --git a/install-agent.sh b/install-agent.sh index 9578c4a0..96b50395 100644 --- a/install-agent.sh +++ b/install-agent.sh @@ -402,7 +402,19 @@ selfheal_binary() { return 0 } + +# (#879) self-heal: tras un sysupgrade /etc sobrevive pero el binario del +# watchdog no: si quedó la entrada de cron del antiguo watchdog, retirarla +# (cron loguearía un comando inexistente cada 2 min). +cleanup_stale_watchdog_cron() { + [ -f /usr/sbin/netpulse-watchdog ] && return 0 + crontab -l 2>/dev/null | grep -q netpulse-watchdog || return 0 + ( crontab -l 2>/dev/null | grep -v netpulse-watchdog ) | crontab - 2>/dev/null || true + logger -t netpulse-agent "watchdog cron huérfano retirado (#879)" +} + start_service() { + cleanup_stale_watchdog_cron selfheal_binary || logger -t netpulse-agent "self-heal: no se pudo restaurar el binario" procd_open_instance netpulse-agent procd_set_param command "$BIN" diff --git a/server-go/internal/reinstall/reinstall.go b/server-go/internal/reinstall/reinstall.go index 9b9d34e8..1b5087bb 100644 --- a/server-go/internal/reinstall/reinstall.go +++ b/server-go/internal/reinstall/reinstall.go @@ -141,7 +141,19 @@ selfheal_binary() { return 0 } -start_service() { + + # (#879) self-heal: tras un sysupgrade /etc sobrevive pero el binario del + # watchdog no: si quedó la entrada de cron del antiguo watchdog, retirarla + # (cron loguearía un comando inexistente cada 2 min). + cleanup_stale_watchdog_cron() { + [ -f /usr/sbin/netpulse-watchdog ] && return 0 + crontab -l 2>/dev/null | grep -q netpulse-watchdog || return 0 + ( crontab -l 2>/dev/null | grep -v netpulse-watchdog ) | crontab - 2>/dev/null || true + logger -t netpulse-agent "watchdog cron huérfano retirado (#879)" + } + + start_service() { + cleanup_stale_watchdog_cron selfheal_binary || logger -t netpulse-agent "self-heal: no se pudo restaurar el binario" procd_open_instance netpulse-agent procd_set_param command "$BIN" diff --git a/server-go/internal/reinstall/script_test.go b/server-go/internal/reinstall/script_test.go index 63429891..023bc844 100644 --- a/server-go/internal/reinstall/script_test.go +++ b/server-go/internal/reinstall/script_test.go @@ -129,6 +129,23 @@ func TestScriptSelfHealInit(t *testing.T) { } } +// #879: el init entregado por el reinstall auto-repara la entrada de cron del +// antiguo watchdog (tras sysupgrade /etc sobrevive pero el binario no, y cron +// loguearía un comando inexistente cada 2 min). +func TestScriptInitSelfHealsStaleWatchdogCron(t *testing.T) { + s := scriptForTest() + for _, want := range []string{ + "cleanup_stale_watchdog_cron()", + "[ -f /usr/sbin/netpulse-watchdog ] && return 0", + "crontab -l 2>/dev/null | grep -q netpulse-watchdog || return 0", + "cleanup_stale_watchdog_cron", + } { + if !strings.Contains(s, want) { + t.Errorf("init sin self-heal #879: falta %q", want) + } + } +} + // #851: el watchdog cron YA NO se instala; el script limpia los restos de // instalaciones previas que sí lo tenían. func TestScriptNoWatchdogCron(t *testing.T) {