Monitoring Crontab Linux

Maîtrisez la surveillance de vos tâches planifiées sous Linux

Le cron est l'outil de planification historique et le plus utilisé sous Linux. Depuis plus de 40 ans, il permet d'automatiser l'exécution de scripts à des horaires définis. Malgré sa simplicité apparente, le cron cache de nombreux pièges qui peuvent conduire à des échecs silencieux, passant inaperçus pendant des jours voire des semaines.

Les problèmes courants incluent les crontabs effacés lors de mises à jour système, les variables d'environnement manquantes, les chemins relatifs qui ne fonctionnent pas, et les erreurs de syntaxe dans la planification. Sans surveillance externe, ces problèmes restent invisibles car le cron lui-même n'a pas de mécanisme d'alerte intégré.

MoniTao offre une solution de monitoring heartbeat qui complète parfaitement le cron Linux. En ajoutant un simple appel curl à la fin de vos scripts, vous êtes immédiatement alerté si un cron ne s'exécute pas ou échoue, quelle qu'en soit la raison.

Rappels essentiels sur crontab

Avant de mettre en place le monitoring, voici les commandes et fichiers clés de la gestion cron sous Linux.

  • crontab -e : Ă©dite le fichier crontab de l'utilisateur courant. C'est la mĂ©thode recommandĂ©e pour les crons applicatifs.
  • crontab -l : liste les crons de l'utilisateur courant. Utilisez sudo crontab -l pour voir les crons root.
  • /etc/crontab : fichier crontab système global. Contient un champ utilisateur supplĂ©mentaire.
  • /etc/cron.d/ : rĂ©pertoire pour les crons installĂ©s par des packages. Chaque fichier est un crontab indĂ©pendant.

Problèmes fréquents sous Linux

Ces problèmes sont responsables de la majorité des échecs de crons sous Linux. Connaître ces pièges permet de les éviter.

  • Crontab effacĂ© : une mise Ă  jour système ou un crontab -r accidentel peut supprimer tous vos crons. Sauvegardez rĂ©gulièrement avec crontab -l > backup.txt.
  • Variables d'environnement : le cron s'exĂ©cute avec un environnement minimal (PATH limitĂ©, pas de variables shell). DĂ©finissez explicitement PATH et sourcez vos fichiers d'environnement.
  • Permissions : le script ou ses rĂ©pertoires n'ont pas les bonnes permissions. VĂ©rifiez avec ls -la et chmod +x.
  • Sorties non redirigĂ©es : par dĂ©faut, les sorties sont envoyĂ©es par mail local. Sans MTA configurĂ©, elles sont perdues. Redirigez toujours avec >> /var/log/moncron.log 2>&1.

Intégration du monitoring heartbeat

Voici les stratégies pour intégrer MoniTao à vos crons Linux existants.

  • Ajout en fin de ligne : ajoutez && curl -fsS https://api.monitao.com/ping/TOKEN Ă  la fin de chaque ligne cron. Le && garantit que le ping n'est envoyĂ© qu'en cas de succès.
  • Script wrapper : crĂ©ez un script qui encapsule votre commande et gère le heartbeat. Plus flexible pour gĂ©rer les erreurs et les mĂ©triques.
  • Logging intĂ©grĂ© : combinez logging local et heartbeat pour avoir Ă  la fois l'historique des exĂ©cutions et les alertes en temps rĂ©el.
  • Timeout adaptĂ© : configurez le timeout MoniTao en fonction de la frĂ©quence du cron. Pour un cron horaire, un timeout de 90 minutes est raisonnable.

Exemples d'intégration crontab

Voici plusieurs méthodes pour intégrer le monitoring heartbeat dans vos crons Linux :

# Méthode 1 : Ajout direct dans crontab
0 * * * * /path/to/backup.sh && curl -fsS "https://api.monitao.com/ping/TOKEN"

# Méthode 2 : Script wrapper avec gestion d'erreurs
#!/bin/bash
set -e
/path/to/backup.sh
curl -fsS --max-time 10 "https://api.monitao.com/ping/TOKEN"

# Méthode 3 : Avec logging et notification d'échec
#!/bin/bash
LOG=/var/log/backup.log
if /path/to/backup.sh >> $LOG 2>&1; then
    curl -fsS "https://api.monitao.com/ping/TOKEN"
else
    curl -fsS "https://api.monitao.com/ping/TOKEN/fail?msg=Backup+failed"
fi

La méthode 1 est la plus simple pour les crons existants. La méthode 2 offre une meilleure gestion des erreurs avec set -e. La méthode 3 permet de notifier explicitement les échecs avec un message d'erreur.

Debugging des crons Linux

Quand un cron ne fonctionne pas, voici les étapes de diagnostic systématiques.

  • VĂ©rifier les logs système : journalctl -u cron sur systemd, ou grep CRON /var/log/syslog pour voir si le cron a Ă©tĂ© invoquĂ©.
  • Simuler l'environnement cron : testez avec env -i /bin/bash -c "votre_commande" pour reproduire l'environnement minimal du cron.
  • Capturer toutes les erreurs : redirigez stderr vers stdout avec 2>&1 et loggez dans un fichier pour voir les messages d'erreur.
  • Ajouter des logs de debug : insĂ©rez echo "$(date) - Script dĂ©marrĂ©" >> /tmp/debug.log en dĂ©but de script pour confirmer l'exĂ©cution.

Configuration des alertes

Configurez vos alertes MoniTao pour être notifié des problèmes sans être submergé.

  • Cron non exĂ©cutĂ© : aucun ping reçu dans le dĂ©lai configurĂ©. VĂ©rifiez le service cron, le crontab et les permissions.
  • Échec explicite : le script a envoyĂ© un ping /fail. Consultez les logs pour identifier la cause.
  • DurĂ©e anormale : le cron prend plus de temps que d'habitude. Peut indiquer un problème de performance ou de ressources.
  • Multiples Ă©checs : plusieurs exĂ©cutions consĂ©cutives ont Ă©chouĂ©. NĂ©cessite une investigation urgente.

Checklist cron Linux

  • crontab -l exĂ©cutĂ© et vĂ©rifiĂ© pour chaque utilisateur
  • Tous les chemins sont absolus dans les scripts
  • Sorties redirigĂ©es vers des fichiers de log
  • Heartbeat MoniTao ajoutĂ© Ă  chaque cron critique
  • Test manuel du script dans un environnement propre
  • Sauvegarde du crontab effectuĂ©e rĂ©gulièrement

Questions fréquentes sur le cron Linux

Mon cron fonctionne en ligne de commande mais pas via crontab. Pourquoi ?

L'environnement cron est minimal : PATH réduit, pas de variables shell personnalisées. Utilisez des chemins absolus (ex: /usr/bin/php au lieu de php) et sourcez explicitement vos fichiers d'environnement si nécessaire.

Comment voir les logs d'exécution de mes crons ?

Sur systemd : journalctl -u cron. Sur les systèmes classiques : /var/log/cron ou grep CRON /var/log/syslog. Pour des logs détaillés, redirigez les sorties de vos scripts vers un fichier dédié.

Mon cron s'exécute deux fois simultanément. Pourquoi ?

Vérifiez que le cron n'est pas défini à plusieurs endroits : crontab utilisateur (crontab -l), fichier système (/etc/crontab), et répertoire /etc/cron.d/. Supprimez les doublons.

Comment empêcher deux exécutions concurrentes d'un même cron ?

Utilisez flock pour créer un verrou : flock -n /tmp/myjob.lock ./myjob.sh. Si le lock est déjà pris, la nouvelle instance s'arrête immédiatement.

Mon crontab a disparu après une mise à jour. Comment éviter cela ?

Sauvegardez régulièrement vos crontabs avec crontab -l > /backup/crontab-$(whoami).txt. Automatisez cette sauvegarde avec... un cron ! Stockez aussi une copie dans votre gestionnaire de configuration.

Comment tester un cron sans attendre son heure d'exécution ?

Exécutez manuellement dans un environnement similaire au cron : env -i HOME=$HOME /bin/bash -c "votre_script.sh". Cela simule l'environnement minimal et révèle les problèmes de PATH ou de variables.

Conclusion

Le cron Linux reste l'outil de planification le plus utilisé, mais sa simplicité masque de nombreux pièges. Les erreurs silencieuses, les crontabs perdus et les problèmes d'environnement sont des causes fréquentes de défaillances non détectées.

En combinant les bonnes pratiques de configuration cron avec le monitoring heartbeat de MoniTao, vous obtenez une visibilité complète sur l'exécution de vos tâches planifiées. Commencez par vos crons critiques et étendez progressivement la couverture.

PrĂŞt Ă  dormir sur vos deux oreilles ?

Commencez gratuitement, sans carte bancaire.