cron
À quoi il sert
Le démon cron lit chaque minute les crontabs et lance les commandes dont l'heure est venue. Une ligne compte cinq champs (minute, heure, jour du mois, mois, jour de la semaine) suivis de la commande ; les fichiers système (/etc/crontab, /etc/cron.d/*) ajoutent un sixième champ, le compte sous lequel lancer la commande. Les crontabs utilisateur s'éditent avec crontab -e et vivent dans /var/spool/cron/crontabs/. Sur Debian et Ubuntu, /etc/crontab lance aussi par run-parts les scripts de /etc/cron.daily/, weekly et monthly, relayé par anacron quand il est installé. Debian 13 et Ubuntu 24.04 fournissent le cron de Paul Vixie (version 3.0pl1), abondamment corrigé par Debian ; Red Hat utilise son dérivé, cronie.
Quand le choisir
Il reste partout et chacun sait lire une crontab, ce qui en fait l'outil des tâches héritées et des systèmes sans systemd. Sur un serveur Debian ou Ubuntu que vous administrez, un minuteur systemd (.timer) l'emporte presque toujours : rattrapage d'une exécution manquée (Persistent=true), délai aléatoire sur un parc (RandomizedDelaySec=), pas de chevauchement, sortie dans le journal, limites de ressources et notification d'échec (OnFailure=). Debian elle-même a remplacé plusieurs tâches cron de ses paquets par des minuteurs.
Points d'attention
- Quand le jour du mois et le jour de la semaine sont restreints, ils se combinent par OU, pas par ET.
- Dans la commande, un
%non échappé devient un saut de ligne :date +%Fest coupé. Échappez-le (\%) ou passez par un script. - L'environnement est minimal (
PATH=/usr/bin:/bin, pas de.bashrc) : une commande qui marche dans un terminal peut échouer sous cron. - La sortie est envoyée par courrier au propriétaire ou à
MAILTO. Sans agent de courrier, elle est perdue (No MTA installed, discarding output) : redirigez-la vers le journal ou un fichier, et surveillez la réussite autrement. run-partset/etc/cron.dignorent sans message les fichiers dont le nom contient un point (export.sh) ;run-parts --test /etc/cron.dailymontre ce qui serait lancé.- Un fichier de
/etc/cron.d/doit appartenir à root (sinonWRONG FILE OWNERdans le journal), et sa dernière ligne doit se terminer par un saut de ligne. - Une tâche dans la crontab personnelle d'un administrateur disparaît avec son compte : utilisez un compte de service, et limitez qui peut planifier avec
/etc/cron.allow.
Par où commencer
La leçon Planifier des tâches : cron et minuteurs du cours Linux : administration système, qui inventorie les tâches héritées de sig-outils, écrit une crontab correcte puis la remplace par des minuteurs systemd avec notification d'échec. Puis les pages de manuel crontab(5), crontab(1) et cron(8) de Debian, sur manpages.debian.org.