Ordonnance de tâches avec cron

Les sauvegardes de données font partie des manipulations les plus fréquemment automatisées. Celle-ci doivent êtres faites lorsque le système est le moins occupé, donc de préférence durant la nuit. Pour cela, les systèmes de type Unix possèdent cron qui s'occupe de faire à votre place tout ce que vous lui avez ordonné en fonction du jour, de l'heure, du mois, etc. Bien sûr, cron est très utile pour les sauvegardes, mais il permet également de lancer toutes sortes de programmes.

Où est le programme cron ?

Il est très courant de parler de cron comme d'une application. En fait, dans les systèmes Linux actuels il n'existe bien souvent aucune commande nommée cron. C'est le démon crond et la commande crontab qui constituent cron. Il y a quelques années, le démon crond se nommait cron et était placé dans /etc. De nos jours, les distributions modernes de Linux placent crond ou parfois cron dans /sbin.

Syntaxe de crontab

Vous l'aurez compris, la seule manière de passer des ordres à cron est d'utiliser la commande crontab. Pour ajouter une entrée dans la table cron, tapez simplement crontab -e. Si tout se passe normalement, l'éditeur vi devrait se lancer vous présentant à l'écran la table actuelle. La syntaxe d'une entrée est la suivante :

mm hh jj MMM JJJ commande >/dev/null

mm représente les minutes.
hh représente l'heure.
jj représente le numéro du jour dans le mois.
MMM représente le nom du mois en abrégé.
JJJ représente le nom du jour en abrégé ou en chiffre (0 pour dimanche, 1 pour lundi, etc.)
commande représente l'appel d'une commande ou d'un script shell.

La mention >/dev/null permet d'empêcher cron de vous envoyer un mail de confirmation. En remplaçant >/dev/null par >/nomdefichier, vous pouvez garder une trace des actions de cron.

Exemples

15 10 * * * df >>/espace_disque.log

Ici, tous les jours à 10 heures 15, la sortie de la commande df (disk free) est stockée dans un fichier espace_disque.log à la racine du disque. Les astérisques représentent la notion de "tous" ou "n'importe lequel".

15 10 12 * * df >>/espace_disque.log

Idem que l'exemple précédent, mais ici l'opération se fera à 10 heures 15 tous les 12 du mois.

15 10 12,15 * * df >>/espace_disque.log

Idem mais le 12 et le 15 du mois.

15 10 12-15 * * df >>/espace_disque.log

Idem mais tous les jours du 12 au 15 du mois.

15 10 */3 * * df >>/espace_disque.log

Cette fois l'opération se fera à 10 heures 15 mais tous les trois jours (le 1, 4, 7, 10, etc...) du mois.

Les fichiers

Lorsque vous modifiez la table cron, vous modifiez en réalité un fichier placé dans /var/spool/cron/crontabs/utilisateur. Pour le root par exemple, ce fichier s'appellera tout logiquement root.

Ne perdez pas de vue que tous les utilisateurs n'ont pas forcément les mêmes droits sur un système Linux. Evitez donc de lancer des commandes depuis une table cron pour un utilisateur alors que celui-ci n'a pas les permissions pour le faire. Si vous êtes allergique à vi, il vous est possible de faire appel à un autre éditeur en modifiant une variable d'environnement VISUAL ou EDITOR selon la version de cron que vous utilisez. Vérifiez la man page de cron pour les informations spécifiques à votre version.

Dernier point, il existe un certain nombre d'utilitaires "facade" pour cron dont le très beau Visual Cron. Ces utilitaires sont plus abordables pour les nouveaux, mais placent invariablement un élément supplémentaire entre vous et cron.

Linux Magazine France n° 3 - Février 99