Planifier des tâches avec cron
Cron exécute une commande à intervalle régulier : sauvegarde, renouvellement de certificat, nettoyage. C'est un outil ancien mais toujours présent, simple à auditer et suffisant pour la plupart des tâches d'un VPS. Une crontab mal écrite échoue silencieusement, d'où l'importance des chemins absolus et des journaux.
Comprendre la syntaxe
crontab -e ouvre la crontab de l'utilisateur courant. Chaque ligne active contient cinq champs puis la commande :
minute heure jour-du-mois mois jour-de-semaine commandeLes minutes et les heures vont de 0 à 59 et de 0 à 23. * signifie « chaque », */15 « toutes les quinze unités », 1-5 une plage et 1,15 une liste. Exemple quotidien à 03h15 :
15 3 * * * /usr/local/bin/sauvegarde.shSi le jour du mois et le jour de la semaine sont tous deux restreints, cron exécute la tâche si l'un des deux correspond. Utilisez @daily, @weekly ou @reboot pour les cas simples. crontab -l affiche la crontab ; crontab -r la supprime sans confirmation, exportez-la avant.
Écrire une tâche fiable
Cron démarre avec un environnement minimal : PATH est réduit et le répertoire courant est le home. Écrivez des chemins absolus et fixez l'environnement en tête de crontab :
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""
15 3 * * * flock -n /run/sauvegarde.lock /usr/local/bin/sauvegarde.sh >> /var/log/sauvegarde.log 2>&1flock -nempêche deux exécutions simultanées si la précédente dure.>> ... 2>&1conserve la sortie standard et les erreurs ; sans redirection, cron tente d'envoyer un e-mail et échoue souvent faute de serveur mail.- Le script doit avoir un shebang et être exécutable (
chmod 755). - Testez-le avec l'utilisateur qui exécute la crontab, pas avec root par confort.
Les fichiers de /etc/cron.d/ ajoutent un champ utilisateur avant la commande. Les crontabs utilisateur n'en ont pas.
Vérifier l'exécution
systemctl status cron
journalctl -u cron --since today
tail -n 20 /var/log/sauvegarde.logPour valider une planification, utilisez temporairement * * * * *, attendez une minute, puis remettez l'horaire réel. Vérifiez le fuseau avec timedatectl : cron suit l'heure système, et un changement d'heure peut décaler ou répéter une tâche.
Cron ou timer systemd ?
| Critère | cron | Timer systemd |
|---|---|---|
| Simplicité | Très simple | Unité à écrire |
| Exécution manquée | Perdue | Persistent=true la rejoue |
| Journaux | Redirection manuelle | journalctl -u |
| Dépendances | Aucune | After=, Requires= |
| Précision | Minute | Seconde |
Un timer convient aux tâches qui doivent survivre à un arrêt ou dépendre d'un autre service. Cron reste adapté aux scripts courts et autonomes.
Vérifier le résultat
Contrôlez que la tâche s'exécute à l'heure prévue, que le fichier de sortie grandit et que le code de retour est zéro. Ajoutez une surveillance simple : si la sauvegarde n'écrit plus depuis deux jours, quelque chose est cassé. Une tâche planifiée non supervisée finit toujours par échouer sans que personne ne le remarque.
Publicité
Cet article vous a-t-il aidé ?
À lire aussi
- Gérer ses services avec systemdCommandes systemctl essentielles, unité personnalisée pour une application et lecture des journaux.
- Lire les logs avec journalctlFiltrer par service et par date, retrouver une erreur de démarrage et maîtriser l'espace du journal.
- Changer le port SSH sans se verrouillerDéplacer SSH vers un autre port en ouvrant le pare-feu d'abord et en testant depuis une seconde session.