Chapitre 22. Tâches automatisées

Dans Linux, des tâches peuvent être configurées pour s'exécuter automatiquement pendant une période de temps donnée, à des dates données ou lorsque la moyenne de chargement du système est en-dessous d'un certain niveau. Red Hat Linux est préconfiguré pour l'exécution de certaines tâches système 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 des copies de sauvegarde périodiques, surveiller le système, exécuter des scripts personnalisés, etc.

Red Hat Linux fournit quatre utilitaires de tâches automatisées : cron, anacron, at et batch.

Cron

Cron est un démon qui peut être utilisé pour l'exécution de tâches programmées : combinaison de l'heure, du jour du mois, du mois, du jour de la semaine et de la semaine.

Cron présume que le système est allumé en continu. 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 au lieu d'heures précises, reportez-vous à la la section intitulée Anacron. Pour programmer des tâches une seule fois, consultez la la section intitulée At et Batch.

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

Configuration d'une tâche 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 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 il doit utiliser (dans cet exemple, bash shell), 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 e-mail au nom d'utilisateur défini par la variable MAILTO. Si la variable MAILTO est une chaîne vide (MAILTO=""), aucun e-mail ne sera envoyé. La variable HOME peut être utilisée pour le paramétrage du répertoire à utiliser pour l'exécution de commandes ou de scripts.

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

minute   hour   day   month   dayofweek   command

  • minute — nombre entier entre 0 et 59

  • hour — nombre entier entre 0 et 23

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

  • month — nombre entier entre 1 et 12 (ou abréviation du nom du mois : jan, feb, etc.)

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

  • command — la commande à exécuter. La commande peut être une commande comme ls /proc >> /tmp/proc ou la commande d'exécution d'un script personnalisé dont vous êtes l'auteur.

Pour les valeurs ci-dessus, un astérisque (*) peut être utilisé pour indiquer toutes les valeurs valides. Par exemple, un astérisque utilisé pour la valeur du mois signifie une exécution de la commande tous les mois (avec respect des restrictions des autres valeurs).

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

Une liste 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 (/) peut être utilisée pour spécifier des valeurs échelonnées. Pour passer un nombre entier dans une gamme, faites-la suivre 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 passer un mois sur trois.

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

Exemple 22-1. Exemples de crontabs

# 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

Comme vous pouvez le voir dans le fichier /etc/crontab, le script run-parts est utilisé pour l'exécution des scripts dans les répertoires /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly et /etc/cron.monthly (toutes les heures, tous les jours, toutes les semaines ou tous les mois, respectivement). Les fichiers de ces répertoires doivent être des scripts de shell.

Si une tâche cron doit être exécutée en suivant un planning ne correspondant ni à toutes les heures, ni à tous les jours, ni à toutes les semaines, ni à tous les mois, il est possible de l'ajouter au répertoire /etc/cron.d. Tous les fichiers de ce répertoire utilisent la même syntaxe que /etc/crontab.

Les utilisateurs autres que l'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 d'utilisateur des utilisateurs qui les ont créés. Pour créer un crontab en tant qu'utilisateur, connectez-vous en tant que l'utilisateur voulu et tapez la commande crontab -e pour éditer le crontab utilisateur à l'aide de l'éditeur déterminé par la variable d'environnement VISUAL ou EDITOR. Le fichier utilise le même format que /etc/crontab. Lorsque les modifications sur le crontab sont enregistrées, le crontab est stocké avec le nom d'utilisateur et inséré dans le fichier /var/spool/cron/nom d'utilisateur.

Le démon cron contrôle le fichier etc/crontab, le répertoire etc/cron.d/ ainsi que le répertoire /var/spool/cron toutes les minutes. S'il y trouve des modifications, celles-ci sont chargées dans la mémoire. Ainsi, il n'est pas nécessaire de redémarrer le démon si un fichier crontab est modifié.

Contrôle de l'accès à cron

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

Le super-utilisateur peut toujours utiliser cron, indépendamment des noms d'utilisateurs contenus dans les fichiers de contrôle de l'accès.

Si le fichier cron.allow existe, seuls les utilisateurs qu'il contient ont l'autorisation d'utiliser cron, et le fichier at.deny est ignoré.

Si cron.allow n'existe pas, aucun des utilisateurs énumérés dans cron.deny n'est autorisé à utiliser cron.

Lancement et interruption 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 du système. Reportez-vous au Chapitre 8 pour en savoir plus sur le lancement automatique du service cron au démarrage du système.