Ce billet est une traduction de l'article «Wednesday Why: Crontab» écrit par Chris Tyler.


Cron est le programmateur de tâches d'Unix/Linux. Il utilise les fichiers crontab pour déterminer la date et l'heure à laquelle une tâche va être exécuté. Le fichier crontab principal est /etc/crontab; les fichiers contrab supplémentaires sont placés dans /etc/cron.d/ et les fichiers crontab personnels dans /var/spool/cron/.

Le fichier crontab principal ressemble à ça:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Les paires noms et valeurs au début du fichier configure les variables d'environnement. Les lignes restantes contiennent les champs de date et d'heure, le nom du compte sous lequel la commande va être exécutée et le nom de la commande. Les fichiers crontab personnels sont installé avec la commande crontab et ne contienne pas de champ indiquant le nom du compte.

Le script run-parts lance simplement les scripts contenu dans le dossier spécifié. Un des scripts de chaque répertoires est nommé 0anacron qui met à jour l'estampille temporelle des fichiers enregistré dans /var/pool/anacron. Ces estampilles temporelles sont utilisé par le système anacron au démarage de l'ordinateur pour s'assurer au démarrage de l'ordinateur que les tâches sont bien été exécutées même si l'ordinateur n'est jamais allumé entre 4h et 5h du matin.

Par exemple, un ordinateur de bureau qui est coupé tout les soirs et allumé tout les matins à 9h ne serra jamais allumé à 4h22 lorsque les scripts contenus dans /etc/cron.weekly doivent être exécuté. L'une des tâches opérer hebdomadairement est makewhatis, qui reconstruit la base de donnée whatis qui est utilisé par les commandes apropos, man -k et whatis. Ces commandes ne devraient donc jamais avoir accès à index à jour. Pour résoudre ce problème, lorsque le système démarre, le script d'initiation /etc/rc.d/init.d/anacron vérifie le fichier /var/spool/anacron/cron.weekly pour voir quand les scripts contenu dans /etc/cron.weekly ont été lancé pour la dernière fois. Si cela fait plus de 7 jours, les scripts sont exécuté après un bref délai par run-parts.

Les paquets nécessitant la programmation de tâche peuvent faire cela de deux manières: inclure un fichier crontab qui sera placé dans /etc/cron.d (qui est l'approche utilisé par le paquet smolt) ou inclure un script qui sera placé dans /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly ou /etc/cron.mounthly (qui est l'approche utilisé par cups).