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.
Liens utiles
PrĂŞt Ă dormir sur vos deux oreilles ?
Commencez gratuitement, sans carte bancaire.