← Tous les guides

Guide · Tâches cron

Surveiller les tâches cron avec un dead man's switch

Cron excelle à lancer un job à l'heure prévue, et à ne rien dire d'autre, jamais. S'il arrête silencieusement d'exécuter votre job, cron lui-même ne vous préviendra jamais. Un dead man's switch, si.

1. Ce que cron ne vous dit pas

Cron (ou le Planificateur de tâches Windows, ou un CronJob Kubernetes) se contente de déclencher votre commande au bon moment. Il ignore si le job a réellement fait son travail. Si le démon cron est arrêté, si un hôte redémarre dans un mauvais état, si un déploiement supprime silencieusement l'entrée crontab, ou si le script plante avant d'atteindre la ligne qui compte, rien ne se plaint. Pas d'erreur, pas d'e-mail, pas de croix rouge nulle part. Vous le découvrez quand quelqu'un remarque que la sauvegarde, le rapport ou la synchronisation n'a pas tourné depuis des jours.

2. Le modèle du check-in

Un dead man's switch inverse la logique. Plutôt que de compter sur le job pour signaler qu'il a échoué, Mortemain attend qu'il signale qu'il s'est bien déroulé, et vous alerte dès que cette confirmation cesse d'arriver. Vous créez un check, récupérez une URL de ping unique, et ajoutez une requête au job pour qu'il l'appelle quand il se termine :

 n'importe quel job, sur succès
# la dernière chose que fait votre job
curl -fsS -m 10 https://ping.mortemain.com/your-check-uuid

Si cette requête n'arrive pas dans la fenêtre (fréquence + délai de grâce) du check, Mortemain le passe en panne et vous alerte. Aucun agent à installer, aucun SDK à importer : c'est une requête HTTP qu'une tâche cron, une tâche PowerShell, un script Python ou un conteneur peuvent tous déjà faire.

3. Ajoutez-le au job que vous utilisez vraiment

Le check-in reste toujours le même principe, mais la ligne exacte dépend de ce qui exécute le job. Choisissez votre plateforme pour du code prêt à copier-coller :

4. Alertez immédiatement sur échec, et sur les exécutions lentes (optionnel)

Un simple check-in indique seulement à Mortemain que le job n'est pas terminé, il ne dit pas pourquoi. Deux signaux supplémentaires comblent cet écart, tous deux détaillés avec du code exact dans chaque guide de plateforme ci-dessus :

  • /fail, appelé depuis votre gestionnaire d'erreurs, force le check en panne immédiatement au lieu d'attendre l'expiration de la fenêtre.
  • /start, appelé au démarrage du job, permet à Mortemain de mesurer la durée de chaque exécution, une exécution qui dure soudain quatre fois plus longtemps devient un avertissement avant de devenir une panne.

Testez

Déclenchez le job une fois à la main et regardez son check passer actif en une seconde ou deux. Puis désactivez le job, commentez la ligne crontab, mettez le CronJob en pause, et laissez passer sa fenêtre. L'alerte de panne qui suit, c'est tout l'intérêt : c'est le message que cron n'allait jamais vous envoyer.