La planification de tâches : AT et CRON

Posted by

I) Tâche récurrente : Cron

Cron est un démon utilisé pour planifier des tâches qui devront être exécutées manière répétées dans le temps, par exemple une sauvegarde toutes les nuits à 4H. Cron est régit par le démon crond, par conséquent il doit être lancé pour que vous puissiez l’utiliser. Il existe deux fichiers pour limiter les utilisateurs ayant le droit de se servir de cron, /etc/cron.allow pour permettre et /etc/cron.deny pour refuser. Il suffit dans ces fichiers de lister un utilisateur par ligne, les utilisateurs autorisés ou refusés.

A l’installation une crontab spéciale est créé, /etc/crontab. Elle sert à appeler périodiquement le script run-parts. Ce script permet de lancer tous les scripts présents dans un répertoire particulier placé en paramètre. Ces répertoires sont /etc/crontab.daily, /etc/crontab.weekly et /etc/crontab.monthly, correspondant aux tâches journalières, hebdomadaires et mensuelles comme la rotation des logs.

Crontab du système, les vraies tâches sont classifiées dans des sous répertoires :

 SHELL=/bin/sh
 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
 # m h dom mon dow user  command
 25 6    * * *   root    test -e /usr/sbin/anacron || run-parts --report /etc/cron.daily
 47 6    * * 7   root    test -e /usr/sbin/anacron || run-parts --report /etc/cron.weekly
 52 6    1 * *   root    test -e /usr/sbin/anacron || run-parts --report /etc/cron.monthly
 

Chaque utilisateur dispose cependant de sa propre crontab. Pour l’éditer, il lui suffit de taper crontab -e. Celà lance alors l’affichage de la crontab dans l’éditeur spécifié par la variable $EDITOR. Par défaut, il s’agit de vim. Si par exemple vous voudriez utiliser Emacs, il vous suffit de taper :

$ export EDITOR=emacs

La première chose à faire concernant la crontab est de définir un shell dans lequel s’exécutera la tâche. Ceci se fait part l’export d’une variable SHELL=nom du shell. Ensuite, il est plus facile de définir un path (chemin d’accès) pour éviter de taper le patch absolu pour chaque commande. Pour finir sur les variables d’environnement, il existe aussi la variable HOME pour le répertoire de base et la variable MAILTO pour envoyer à l’utilisateur le résultat de l’exécution de la tâche.

Utilisation de la commande crontab :

$ crontab -e # Edite la crontab.
$ crontab -r # Supprime la crontab de /var/spool/cron.
$ crontab -l # Affiche le contenu de la crontab.

Exemple de crontab :

SHELL=/bin/zsh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
MAILTO=julien
 
# Récupérer les mails toutes les 5 minutes.
5      *      *       *       *       fetchmail
# Effectuer une sauvegarde tous les dimanches à 5 heures du matin.
0      5      *       *       0       sauvegarde.sh

Les paramètres de temps se spécifient comme suit (man 5 crontab) :

minutes (0-59)
heure (0-23)
jour du mois (0-31)
mois (0-12)
Jour de la semaine (0-7, 0 et 7 dimanche)

II) Tâche ponctuelle : AT

AT permet de planifier des commandes qui ne s’exécuterons qu’une seule fois. Cette commande est régie par le démon atd. Il y a deux manière d’utiliser cette commande, soit en mode interactif, soit en spécifiant un script contenant la tâche à planifier.

Syntaxe :

$ at 

Puis pressez controle+D pour terminer.

Exemple :

$ at 18:00
at> fetchmail
at> 
job 1 at 2003-01-16 18:00

ou :

$ at -f  

L’heure peut être spécifiée de la manière suivante :
HHMM ou HH:MM
midnight / noon / teatime : minuit / midi / 16h
MMJJAA ou MM/JJ/AA ou MM.JJ.AA : attention, les jours sont à noter après le mois.
now + x minutes / hours / days / weeks : x minutes / heures / jours / semaines à partir de maintenant

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.