Cron et la gestion de tâches automatiques

Sous Unix/Linux le système “cron” permet de lancer périodiquement des commandes ou processus. On s’en sert par exemple pour automatiser des sauvegardes, des transferts de fichier, des extractions de bases de données, des envois de messages…

Le logiciel qui orchestre tout cela est communément appelé “cron” (en fait le démon “crond” chargé en mémoire). Il va lancer à intervalles réguliers ou à des moments bien déterminés différentes tâches.

Les commandes que cron devra exécuter (par exemple une sauvegarde) sont précisées dans une table de référence. Celle-ci contient les informations relatives aux moments auquels il faut exécuter certaines commandes et le nom des commandes ou les chemins d’accès des scripts à exécuter. Cette table peut-être éditée avec l’utilitaire “crontab” (passage automatique via l’éditeur déterminé par la variable d’environnement VISUAL ou EDITOR – le plus souvent “vi”).

Pour mettre à jour la table de référence de cron, vous pouvez exécuter la commande suivante:

> crontab -e

L’information présentée en réponse est formatée ligne par ligne, chaque ligne reprenant la définition du moment d’exécution suivie de la commande ou du script à exécuter. En voici la structure:

minute hour day month dayofweek task

Le premier champ représente les minutes (0-59).
Le second champ représente les heures (0-23).
Le troisième champ représente les jours du mois (1-31).
Le quatrième champ représente les mois de l’année (1-12).
Le cinquième champ représente les jours de la semaine (0-6 dimanche=0).
Le sixième champ représente la commande ou le script à exécuter.
Le septième champ représente l’instruction à exécuter.

Analysons cela à travers quelques exemples:

> 15 20 * * * echo “hello” >>/tmp/log_cr.txt

(lancement de la commande echo tous les hours à 20h15)

> 50 6 1 * * /home/scripts/bck.sh

(exécution de bck.sh le premier jour de chaque mois à 6h50)

> 00 10 1-5 * * /usr/bin/hello.sh >>/dev/null

(exécution de hello.rb du 1er au 5 de chaque mois à 10h00)