Alertes d'Échec de Cron

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.

Types d'Échecs de Cron

Les échecs de cron se manifestent de différentes manières, chacune nécessitant une approche de détection adaptée :

Causes Fréquentes d'Échec

Comprendre les causes communes permet de mieux anticiper et diagnostiquer les problèmes :

Stratégies de Détection des Échecs

MoniTao propose plusieurs approches pour détecter les échecs de cron :

Wrapper Script Complet

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"

Configuration des Alertes

Optimisez vos alertes pour une réponse efficace aux échecs :

Bonnes Pratiques de Gestion des Échecs

Adoptez ces pratiques pour une gestion robuste des échecs de cron :

Checklist Alerting Échecs

  • Scripts avec set -e ou équivalent
  • Try/catch global dans les scripts applicatifs
  • Ping conditionnel (&&) configuré
  • Endpoint /fail utilisé pour les échecs explicites
  • Logs de cron configurés et accessibles
  • Alertes testées avec un échec simulé

Questions Fréquentes

Quelle différence entre l'absence de ping et l'endpoint /fail ?

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.

Puis-je avoir des priorités d'alertes différentes selon la criticité ?

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é.

Comment relancer automatiquement un cron après un échec ?

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.

L'alerte arrive après combien de temps exactement ?

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.

Comment inclure le message d'erreur dans l'alerte MoniTao ?

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.

Mon cron échoue de façon intermittente. Comment réduire les fausses alertes ?

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.

Réagir Rapidement aux Échecs

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.

Prêt à dormir sur vos deux oreilles ?

Commencez gratuitement, sans carte bancaire.