Soyez alerté immédiatement quand un cron échoue pour réagir avant l'impact métier
Un cron qui échoue représente un risque métier direct. Contrairement au cron silencieux qui cesse de s'exécuter, le cron en échec s'exécute bien mais rencontre un problème : exception non gérée, timeout, ressource indisponible. Sans alerting approprié, ces échecs passent inaperçus pendant des heures, voire des jours.
Les conséquences d'un échec non détecté varient selon la criticité du cron : backup incomplet, données client non synchronisées, rapports non générés, factures non envoyées. Chaque minute de retard dans la détection augmente l'impact potentiel et complique la résolution.
MoniTao offre deux mécanismes complémentaires pour détecter les échecs : l'absence de ping (le cron ne signale pas son succès) et l'endpoint /fail (le cron signale explicitement son échec). Ensemble, ils garantissent une couverture complète des scénarios de défaillance.
Les échecs de cron se manifestent de différentes manières, chacune nécessitant une approche de détection adaptée :
Comprendre les causes communes permet de mieux anticiper et diagnostiquer les problèmes :
MoniTao propose plusieurs approches pour détecter les échecs de cron :
Voici un wrapper shell robuste qui gère tous les scénarios d'échec :
#!/bin/bash
# wrapper.sh - Wrapper universel pour crons avec MoniTao
# Usage: ./wrapper.sh "commande" "https://api.monitao.com/ping/token"
COMMAND=$1
MONITAO_URL=$2
LOG_FILE="/var/log/cron/$(date +%Y%m%d_%H%M%S).log"
# Exécuter la commande et capturer la sortie
echo "[$(date)] Démarrage: $COMMAND" >> "$LOG_FILE"
$COMMAND >> "$LOG_FILE" 2>&1
EXIT_CODE=$?
echo "[$(date)] Terminé avec code: $EXIT_CODE" >> "$LOG_FILE"
# Signaler à MoniTao selon le résultat
if [ $EXIT_CODE -eq 0 ]; then
curl -fsS --max-time 10 "$MONITAO_URL" \
-d "{\"status\": \"success\", \"duration\": \"$(tail -1 $LOG_FILE)\"}" \
-H "Content-Type: application/json"
else
# Remplacer /ping par /fail dans l'URL
FAIL_URL=$(echo "$MONITAO_URL" | sed 's/\/ping\//\/fail\//')
curl -fsS --max-time 10 "$FAIL_URL" \
-d "{\"status\": \"failed\", \"exit_code\": $EXIT_CODE}" \
-H "Content-Type: application/json"
fi
exit $EXIT_CODE
Ce wrapper capture la sortie du cron dans un fichier log, vérifie le code de retour, et signale le statut approprié à MoniTao. En cas d'échec, il utilise l'endpoint /fail pour une alerte immédiate. Utilisez-le ainsi dans votre crontab : 0 * * * * /path/to/wrapper.sh "/path/to/script.sh" "URL"
Optimisez vos alertes pour une réponse efficace aux échecs :
Adoptez ces pratiques pour une gestion robuste des échecs de cron :
L'absence de ping signifie que le cron ne s'est pas exécuté du tout (silencieux) ou n'a pas terminé (crash, timeout). L'endpoint /fail signifie que le cron s'est exécuté mais a détecté un problème et vous en informe explicitement. /fail déclenche une alerte immédiate, l'absence de ping attend le timeout.
Oui, créez des heartbeats séparés pour les crons critiques (alerte immédiate email + Slack) et les crons moins critiques (alerte email seul après délai). Configurez les canaux de notification selon le niveau de criticité.
MoniTao détecte les échecs mais ne relance pas les crons. Pour la relance automatique, utilisez systemd avec Restart=on-failure, supervisord, ou implémentez une logique de retry dans votre script. Surveillez le nombre de tentatives pour éviter les boucles infinies.
Pour /fail : immédiatement (quelques secondes). Pour l'absence de ping : intervalle configuré + période de grâce. Par exemple, un cron horaire avec 10 minutes de grâce déclenchera une alerte 70 minutes après le dernier ping réussi.
L'endpoint /fail accepte un payload JSON. Incluez un champ "message" avec l'erreur : curl URL -d '{"status": "failed", "message": "Database connection refused"}'. Ce message apparaîtra dans la notification.
Implémentez une logique de retry dans votre script (3 tentatives avec délai exponentiel) avant de signaler un échec. Vous pouvez aussi configurer MoniTao pour n'alerter qu'après X échecs consécutifs, filtrant ainsi les problèmes ponctuels.
Les échecs de cron sont inévitables : dépendances externes, ressources épuisées, données invalides. Ce qui fait la différence, c'est la vitesse de détection et de réaction. Un échec détecté en 5 minutes peut souvent être corrigé avant tout impact utilisateur. Un échec détecté après 24 heures laisse des traces durables.
Combinez le ping conditionnel (&&) pour les échecs implicites avec l'endpoint /fail pour les échecs explicites. Encapsulez vos crons dans un wrapper qui log, détecte, et signale. Avec MoniTao, transformez chaque échec en opportunité d'amélioration rapide plutôt qu'en incident client.
Commencez gratuitement, sans carte bancaire.