crontab est le nom du programme Unix qui permet d'éditer la table de configuration du programme cron. Par extension, on appelle souvent cron (ou cron job en anglais) toute application lancée à horaire fixe.
La commande crontab édite en fait un fichier relatif à l'utilisateur qui l'exécute, et en vérifie la syntaxe. Ce fichier se situe dans l'arborescence /var, par exemple :
Ainsi pour l'utilisateur root sur une machine Debian, la table cron sera stockée dans:
Le système Debian dispose en outre d'une crontab centralisée dans /etc/crontab.
Afin d'éditer la table cron, il suffit d'exécuter la commande suivante:
crontab -e
Cette commande a pour effet de lancer l'éditeur par défaut (en général vi) présentant la table actuelle (donc aucune s'il s'agit du premier lancement de crontab).
Chaque entrée de la table (chaque ligne) correspond à une tâche à exécuter et est notée de la façon suivante:
mm hh jj MMM JJJ tâche > log
Dans cette syntaxe:
Pour chaque unité de temps (minute/heure/...) les notations sont possibles:
Si sur la même ligne on trouve précisées une unité de temps "numéro du jour du mois" et une unité de temps "jour de la semaine", celles-ci sont considérées par crontab comme cumulatives.
Imaginons que l'on veuille faire un journal (dans le fichier /tmp/log_df.txt par exemple) automatisé de l'espace disque libre (commande df) à des intervalles de temps précis:
30 23 * * * df >>/tmp/log_df.txt
5 * * * * df >>/tmp/log_df.txt
30 23 1 * * df >>/tmp/log_df.txt
28 22 * * 1 df >>/tmp/log_df.txt
12 10 2-5 * * df >>/tmp/log_df.txt
59 23 */2 * * df >>/tmp/log_df.txt
*/5 * * * * df >>/tmp/log_df.txt
Il est également possible d'exécuter automatiquement des commandes plus complexes à l'aide d'un script shell. Il suffit donc dans un premier temps de créer un script. Puis de le déclarer en tant que tâche dans la table cron.
Le script shell suivant (que l'on supposera stocké dans /home/backup sous le nom backup.cmd) exporte les enregistrements de MySQL (de la table ccmusers par exemple) dans un fichier dont le nom est ccmusers suivi de la date sous la forme jour-mois-annee-heure-minute:
#!/bin/sh DATE=$(date +%d-%m-%Y-%H-%M) /usr/local/mysql/bin/mysqldump -u root ccmusers > /home/backup/ccmusers${DATE}.sql
Ainsi pour automatiser (chaque jour à 23h59) le backup de la table ccmusers de MySQL et l'appel d'une page web, il suffira d'ajouter l'entrée suivante dans la table cron:
59 23 * * * /home/backup/backup.cmd >>/dev/null 30 21 * * * wget -O /dev/null http://exemple.com/mapage.html >>/dev/null
Changements d'heure : Les tâches Cron entre 02h00 et 02h59 du dernier samedi du mois de Mars ne seront pas executés (On passe de 2h à 3h) si vous utilisez le changement d'heure d'hiver/été. A l'inverse, les tâches Cron entre 02h00 et 02h59 du dernier samedi du mois d'Octobre seront executés 2 fois (On passe de 3h à 2h).