Chapitre 28. Tâches automatisées

Dans Linux, des tâches peuvent être configurées pour s'exécuter automatiquement pendant une période de temps ou à une date donnée, ou encore lorsque la moyenne de chargement du système se situe en dessous d'un certain niveau. Red Hat Linux est préconfiguré pour l'exécution de certaines tâches système importantes permettant de garder votre système à jour. Par exemple, la banque de données slocate utilisée par la commande locate est mise à jour quotidiennement. Un administrateur système peut utiliser des tâches automatisées pour effectuer entre autres des sauvegardes périodiques, contrôler le système, exécuter des scripts personnalisés.

Red Hat Linux est livré avec quatre utilitaires de tâches automatisée: cron, anacron, at et batch.

28.1. Cron

Cron est un démon qui peut être utilisé pour programmer l'exécution de tâches récurrentes en fonction d'une combinaison de l'heure, du jour du mois, du mois, du jour de la semaine et de la semaine.

Cron suppose que le système est allumé en permanence. Si le système n'est pas allumé au moment où une tâche doit être exécutée, l'exécution n'a pas lieu. Pour configurer des tâches basées sur des périodes et non sur des dates précises, reportez-vous à la Section 28.2. Pour programmer des tâches uniques, reportez-vous à la Section 28.3.

Afin de pouvoir utiliser le service cron, le paquetage RPM vixie-cron doit être installé et le service crond doit être en cours d'exécution. Pour savoir si le paquetage est installé, utilisez la commande rpm -q vixie-cron. Pour savoir si le service est en cours d'exécution, utilisez la commande /sbin/service crond status.

28.1.1. Configuration des tâches Cron

Le fichier de configuration principal de cron, /etc/crontab, contient les lignes suivantes:

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 quatre premières lignes sont des variables servant à configurer l'environnement dans lequel les tâches cron sont exécutées. La valeur de la variable SHELL indique au système quel environnement shell utiliser (bash shell dans cet exemple) et la variable PATH définit le chemin d'accès utilisé pour l'exécution des commandes. Le résultat des tâches cron est envoyé par courrier électronique au nom d'utilisateur défini par la variable MAILTO. Si la variable MAILTO est définie comme étant une chaîne vide (MAILTO=""), aucun courrier électronique ne sera envoyé. La variable HOME peut être utilisée pour définir le répertoire personnel à utiliser pour l'exécution de commandes ou de scripts.

Chacune des lignes du fichier /etc/crontab représente une tâche et se présente sous le format:

minute   hour   day   month   dayofweek   command

  • minute — tout nombre entier compris entre 0 et 59

  • hour — tout nombre entier compris entre 0 et 23

  • day — tout nombre entier compris entre 1 et 31 (si le mois est spécifié, le jour doit être valide)

  • month — tout nombre entier compris entre 1 et 12 (ou abréviation du nom du mois comme jan, fév, etc.)

  • dayofweek — tout nombre entier compris entre 0 et 7, 0 ou 7 représentant le dimanche (ou l'abréviation du jour de la semaine: lun, mar, etc.)

  • command — la commande à exécuter (il peut s'agir d'une commande telle que ls /proc >> /tmp/proc ou de la commande d'exécution d'un script personnalisé que vous avez écrit.)

Pour les valeurs ci-dessus, un astérisque (*) peut être utilisé afin d'indiquer toutes les valeurs valides. Par exemple, un astérisque utilisé pour la valeur du mois signifie une exécution mensuelle de la commande, en tenant compte bine sûr des contraintes liées aux autres valeurs.

Un trait d'union (-) placé entre deux nombres entiers indique une fourchette de nombres entiers. Par exemple, 1-4 correspond aux nombres entiers 1, 2, 3 et 4.

Une série de valeurs séparées par des virgules (,) correspond à une liste. Par exemple, 3, 4, 6, 8 correspond à ces quatre nombres entiers spécifiques.

La barre oblique en avant (/) peut être utilisée pour spécifier des valeurs échelonnées. Pour sauter la valeur d'un nombre entier dans une fourchette, faites suivre la fourchette de /<nombre entier>. Par exemple, 0-59/2 permet de définir une minute sur deux dans le champ des minutes. Ces valeurs échelonnées peuvent également être utilisées avec un astérisque. Par exemple, la valeur */3 peut être utilisée dans le champ des mois pour exécuter la tâche tous les trois mois.

Les lignes commençant par le signe dièse (#) correspondent à des commentaires et ne sont pas traitées.

Comme vous pouvez le voir dans le fichier /etc/crontab, il utilise le script run-parts pour exécuter les scripts des répertoires /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, et /etc/cron.monthly sur une base respectivement horaire, quotidienne, hebdomadaire ou mensuelle. Les fichiers de ces répertoires doivent être des scripts shell.

Si une tâche cron doit être exécutée sur une base qui n'est ni horaire, ni quotidien, ni hebdomadaire, ni mensuel, elle peut être ajoutée au répertoire /etc/cron.d. Tous les fichiers de ce répertoire utilisent la même syntaxe que /etc/crontab. Reportez-vous à l'Exemple 28-1 pour obtenir différents exemples.

# record the memory usage of the system every monday 
# at 3:30AM in the file /tmp/meminfo
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo
# run custom script the first day of every month at 4:10AM
10 4 1 * * /root/scripts/backup.sh

Exemple 28-1. Exemples de Crontab

Les utilisateurs autres que le super-utilisateur (root) peuvent configurer des tâches cron à l'aide de l'utilitaire crontab. Tous les crontabs définis par l'utilisateur sont stockés dans le répertoire /var/spool/cron et exécutés avec les noms des utilisateurs qui les ont créés. Pour créer un crontab en tant qu'utilisateur, connectez-vous sous le nom de cet utilisateur et tapez la commande crontab -e pour modifier le crontab de l'utilisateur à l'aide de l'éditeur déterminé par la variable d'environnement the VISUAL ou EDITOR. Le fichier utilise le même format que /etc/crontab. Lorsque les modifications apportées au crontab sont enregistrées, ce dernier est stocké en fonction du nom d'utilisateur et enregistré dans le fichier /var/spool/cron/nom-utilisateur.

Le démon cron vérifie le fichier /etc/crontab, le répertoire /etc/cron.d/ ainsi que le répertoire /var/spool/cron toutes les minutes afin de voir si des modifications y ont été apportées. S'il en trouve, celles-ci sont chargées dans la mémoire. Il n'est par conséquent pas nécessaire de redémarrer le démon si un fichier crontab est modifié.

28.1.2. Contrôle de l'accès à cron

Les fichiers /etc/cron.allow e /etc/cron.deny sont utilisés pour limiter l'accès à cron. Le format de ces deux fichiers de contrôle d'accès requiert un nom d'utilisateur sur chaque ligne. Les espaces blancs ne sont pas acceptés. Le démon cron (crond) n'a pas à être redémarré si les fichiers de contrôle d'accès sont modifiés. Ces derniers sont lus chaque fois qu'un utilisateur essaie d'ajouter ou de supprimer une tâche cron.

L'utilisateur root peut toujours utiliser cron, indépendamment des noms d'utilisateurs répertoriés dans les fichiers de contrôle d'accès.

Si le fichier cron.allow existe, seuls les utilisateurs qui y sont répertoriés peuvent utiliser cron et le fichier cron.deny n'est pas pris en compte.

En revanche, si le fichier cron.allow n'existe pas, les utilisateurs répertoriés dans cron.deny ne sont pas autorisés à utiliser cron.

28.1.3. Démarrage et arrêt du service

Pour lancer le service cron, utilisez la commande /sbin/service crond start. Pour interrompre le service, utilisez la commande /sbin/service crond stop. Nous vous recommandons de lancer le service au démarrage. Reportez-vous au Chapitre 14 pour en savoir plus sur le lancement automatique du service cron lors du démarrage.