Les cron jobs sont les services les plus silencieusement dangereux de votre infrastructure. Quand un job de backup échoue, rien ne vous alerte — jusqu’au jour où vous avez besoin de cette sauvegarde.
Maintenant inclut un système de heartbeat conçu pour résoudre exactement ce problème.
Le principe du heartbeat
L’idée est simple : après chaque exécution réussie, votre cron job envoie un “ping” à une URL unique. Maintenant sait à quelle fréquence ce ping doit arriver. Si le ping ne vient pas dans le délai attendu, vous êtes alerté.
Configuration dans Maintenant
Créez un heartbeat monitor via l’API :
curl -X POST http://localhost:8080/api/v1/heartbeats \
-H "Content-Type: application/json" \
-d '{
"name": "Backup PostgreSQL",
"interval": "24h",
"grace_period": "1h"
}'
Maintenant vous renvoie un UUID unique. Utilisez-le dans vos scripts :
# backup.sh
#!/bin/bash
set -e
# Notifier le début du job
curl -fsS -o /dev/null http://localhost:8080/api/v1/ping/${UUID}/start
# Exécuter le backup
pg_dump -h postgres -U app mydb | gzip > /backups/mydb-$(date +%Y%m%d).sql.gz
# Notifier la fin avec le code de sortie
curl -fsS -o /dev/null http://localhost:8080/api/v1/ping/${UUID}/$?
Signaux start/end
Le signal /start est optionnel mais puissant. Il permet à Maintenant de :
- Mesurer la durée de chaque exécution
- Détecter les jobs qui démarrent mais ne finissent jamais (timeout, deadlock)
- Historiser les tendances de durée
Codes de sortie
En ajoutant /$? à la fin de l’URL de ping, vous transmettez le code de sortie du script. Un code non-zéro est enregistré comme un échec, même si le ping arrive à temps.
Intégration avec Docker
Pour les cron jobs qui tournent dans des conteneurs Docker :
services:
backup:
image: postgres:16
entrypoint: /bin/sh
command: >
-c "pg_dump -h postgres -U app mydb | gzip > /backups/daily.sql.gz &&
wget -qO- http://maintenant:8080/api/v1/ping/YOUR-UUID/$$?"
Bonnes pratiques
- Un heartbeat par job critique — backup, nettoyage, renouvellement de certificat, synchronisation
- Période de grâce généreuse — si votre backup prend habituellement 5 minutes, mettez 30 minutes de grâce
- Utilisez les signaux start/end — pour détecter les jobs bloqués
- Transmettez le code de sortie — un job qui “réussit” avec un code d’erreur n’est pas un succès