Expert30 minPrérequis : Modules 6–9

Dead Man's Switch

Distinguer crash de maintenance, signal SSE shutdown, stratégie de résilience.

Deux types de déconnexion

Quand un agent se déconnecte du dashboard, il y a deux scénarios radicalement différents — et Xytherion les distingue :

Arrêt gracieux

L'agent a envoyé un signal SSE 'shutdown' avant de s'arrêter. C'est une maintenance planifiée. Le dashboard affiche : 'Arrêt gracieux — maintenance en cours'.

Perte de connexion

La connexion SSE s'est coupée sans signal préalable. C'est un crash, un reboot non planifié, ou une coupure réseau. Le dashboard affiche : 'Connexion perdue'.

Comment ça fonctionne

Quand l'agent reçoit SIGTERM (arrêt via systemctl stop ou Ctrl+C), Go exécute les défers et l'agent émet un dernier événement SSE de type shutdown. Le dashboard l'intercepte et met à jour l'état.

Si la connexion se coupe sans ce signal — le dashboard ne reçoit plus rien. Après un timeout de quelques secondes sans données, il bascule sur "Connexion perdue".

bash
# Arrêt gracieux (envoie le signal shutdown SSE)sudo systemctl stop xytherion# → Dashboard : "Arrêt gracieux" # Arrêt brutal (simule un crash)sudo kill -9 $(pgrep xytherion)# → Dashboard : "Connexion perdue"

Construire un runbook basé sur les signaux

Cette distinction permet d'automatiser votre réponse aux incidents :

bash
# Webhook generic — réagir différemment selon l'événement# (Dans n8n / Make) # event: "shutdown"  → log de maintenance, pas d'alerte# event: "disconnect" → page oncall immédiatement # Format de l'événement SSE shutdown :# event: shutdown# data: {"hostname":"web-01","time":"2026-07-03T14:32:18Z"}
!
Le Dead Man's Switch ne fonctionne que si systemd est configuré avec Restart=always. Sans ça, un crash tue l'agent définitivement et vous n'avez plus de données.
✎

Exercice pratique — Tester le Dead Man's Switch

  1. 1Ouvrez le dashboard et gardez votre serveur visible.
  2. 2Arrêtez l'agent proprement : sudo systemctl stop xytherion. Observez le message 'Arrêt gracieux'.
  3. 3Redémarrez : sudo systemctl start xytherion. L'agent revient en ligne.
  4. 4Simulez un crash : sudo kill -9 $(pgrep xytherion). Observez 'Connexion perdue'.
  5. 5Systemd le redémarre automatiquement après 3 secondes — confirmez que le dashboard revient en ligne.

Ce que vous venez d'apprendre

  • SIGTERM → signal SSE shutdown → dashboard affiche 'Arrêt gracieux'.
  • Coupure brutale sans signal → dashboard affiche 'Connexion perdue' après timeout.
  • systemd Restart=always est indispensable pour la production — sans lui, un crash est définitif.
  • Les deux types d'événements peuvent déclencher des automations différentes via webhooks.