Les tâches cron sont la colonne vertébrale des tâches automatisées sur les systèmes Unix. Mais quand elles échouent silencieusement, vous ne le saurez peut-être pas jusqu'à ce que des processus critiques se cassent. Voici comment configurer un monitoring fiable pour toutes vos tâches cron.
Pourquoi Monitorer les Tâches Cron ?
Les tâches cron échouent silencieusement. Problèmes courants :
- Le job ne démarre jamais - Typo dans crontab, mauvais chemin
- Le job plante - Erreurs d'exécution, dépendances manquantes
- Le job bloque - Boucles infinies, deadlocks
- Le job s'exécute mais échoue - Erreurs BDD, problèmes réseau
- Le serveur redémarre - Cron ne s'exécute pas après le reboot
Sans monitoring, vous découvrez ces problèmes quand les utilisateurs se plaignent ou que les données deviennent obsolètes.
Méthode 1 : Monitoring Heartbeat (Recommandé)
L'approche la plus fiable : votre tâche cron ping un service de monitoring à la completion.
Étape 1 : Obtenez Votre URL de Ping
Créez un moniteur heartbeat dans votre service de monitoring. Vous recevrez une URL unique comme :
https://wizstatus.com/ping/abc123
Étape 2 : Modifiez Votre Tâche Cron
Ajoutez un ping après l'exécution réussie :
Avant :
0 2 * * * /home/user/backup.sh
Après :
0 2 * * * /home/user/backup.sh && curl -fsS --retry 3 https://wizstatus.com/ping/abc123
Le && assure que le ping ne s'exécute que si le script réussit.
Étape 3 : Configurez le Planning Attendu
Dans votre dashboard de monitoring :
- Définissez le planning : "Quotidien à 2:00"
- Définissez la période de grâce : 30-60 minutes (selon la durée du job)
Étape 4 : Testez la Configuration
Exécutez le job manuellement et vérifiez :
- Le ping apparaît dans votre dashboard de monitoring
- Faites échouer manuellement le job et confirmez que vous recevez une alerte
Méthode 2 : Script Wrapper
Pour les jobs complexes, créez un wrapper :
#!/bin/bash
# cron-wrapper.sh
PING_URL="$1"
shift
COMMAND="$@"
# Exécuter la commande
$COMMAND
EXIT_CODE=$?
# Pinguer uniquement en cas de succès
if [ $EXIT_CODE -eq 0 ]; then
curl -fsS --retry 3 "$PING_URL"
else
echo "Job échoué avec le code de sortie $EXIT_CODE"
fi
exit $EXIT_CODE
Utilisation :
0 2 * * * /home/user/cron-wrapper.sh https://wizstatus.com/ping/abc123 /home/user/backup.sh
Syntaxe Cron (Rappel)
┌───────────── minute (0-59)
│ ┌───────────── heure (0-23)
│ │ ┌───────────── jour du mois (1-31)
│ │ │ ┌───────────── mois (1-12)
│ │ │ │ ┌───────────── jour de la semaine (0-6, Dimanche=0)
│ │ │ │ │
* * * * * commande
Plannings courants :
* * * * * # Chaque minute
0 * * * * # Chaque heure
0 0 * * * # Quotidien à minuit
0 2 * * * # Quotidien à 2h
0 0 * * 0 # Hebdomadaire le dimanche
0 0 1 * * # Mensuel le 1er
Checklist
- Identifié toutes les tâches cron à monitorer
- Créé des moniteurs heartbeat pour chaque job
- Plannings des moniteurs correspondent aux plannings cron
- Périodes de grâce appropriées définies
- Entrées cron modifiées pour pinguer en cas de succès
- Testé les pings d'exécution réussie
- Testé les scénarios d'échec
- Canaux de notification configurés