TUXANANTES FORMATION

http://tuxanantes.free.fr/

Automatiser l'exécution de tâches avec CRON

Crontab


Principe

Commande particulièrement importante pour l'administrateur , elle permet l'exécution automatiquement des commandes à intervalles réguliers, comme par exemple les sauvegardes

Cron (avec l’outil crontab) permet de soumettre des commandes (applications, scripts, ...) que le système doit exécuter à un moment précis, ou à intervalle régulier.



Fonctionnement

/etc/rc.d/init.d/crond start

/etc/rc.d/init.d/crond stop

root 2899 1 0 Mar23 ? 00:00:00 crond



Mise en oeuvre

Pour la compréhension de cet outil , je vais lui faire faire quelque chose qui n'est pas habituel, je vais lui demander d'afficher chaque minute un texte sur mon terminal.

Ce texte sera constitué de la date et de l'heure systeme( ce qui permettra de vérifier qu'il s'exécute bien toutes les minutes ) et un texte quelconque : « Coucou »

1ère étape :

Créer un fichier avec votre editeur préféré.( le nom du fichier n'a pas d'importance , son extension non plus ) qui contiendra la périodicité et la liste de la ou des tâches que crond devra prendre ne charge :

[root@fedora1 ~]# vi moncron

* * * * * ( date;echo "Coucou" ) > /dev/pts/9



Quelques commentaires sur le contenu de ce fichier :

La première étoile : toutes les minutes de chaque heure

2ème : toutes les heures de chaque jour

3ème : tous les jours du mois

4ème : tous les mois de l'année

5ème : tous les jours de la semaine

En d'autre terme : tout le temps , toutes les minutes, je demande à cron d'executer :

( date;echo "Coucou" ) > /dev/pts/9

je redirige explicitement le résultat de l'exécution de la commande « date » et l'affichage du texte « Coucou » vers un terminal désigné par son nom ( ici /dev/pts/9 ) sinon, par défaut, le résultat de cet affichage est envoyé dans la messagerie de l'utilisateur au nom cron exécute cette tâche.



2ème étape

Je demande à cron de prendre en compte le contenu de ce fichier précedemment créé.

C'est la commande « crontab » qui assure cette fonction :

[root@fedora1 ~]# crontab moncron



C'est tout !



Si cette commande est bien prise en charge par cron, aprés la premère minute suivant l'exécution de crontab, on obtient :

[root@fedora1 ~]# Mon Mar 26 17:48:01 CEST 2007

Coucou

Mon Mar 26 17:49:01 CEST 2007

Coucou

Mon Mar 26 17:50:01 CEST 2007

Coucou

Mon Mar 26 17:51:01 CEST 2007

Coucou

Mon Mar 26 17:52:01 CEST 2007

Coucou

Mon Mar 26 17:53:01 CEST 2007

Coucou

Mon Mar 26 17:54:01 CEST 2007

Coucou

Mon Mar 26 17:55:01 CEST 2007

Coucou

Mon Mar 26 17:56:01 CEST 2007

Coucou

...



Description plus avancé du contenu du fichier lu par crontab

        Champs          valeurs autorisées 
--------- --------------
minute 0-59
heure 0-23
jour du mois 0-31
mois 0-12 (ou noms, voir plus bas)
jour de semaine 0-7 (0 et 7 sont dimanche, ou 1=lundi, 2=mardi, ...)
Un champ peut contenir un astérisque (*), qui correspond à l'intervalle du premier au dernier.
Les intervalles de nombres sont permis.
Ils se présentent sous forme de deux nombres séparés par un tiret.
Les bornes sont incluses.
Par exemple, l'intervalle horaire 8-11 correspond à une exécution aux heures 8, 9, 10, et 11.
Les listes sont permises.
Une liste est une série de nombres ou d'intervalles séparés par des virgules.
Exemple ''1,2,5,9'', ''0-4,8-12''.

Quelques exemples complémentaires

# exécution chaque 1er et 15 de chaque mois à minuit

0 0 1,15 * * commande(s) ou script(s)
# provoquer un reboot la machine chaque 1er et 15 du mois à 2h 30 du matin
30 2 1,15 * * /sbin/shutdown -r
# appeler un script de sauvegarde tous les lundis a 3 h 15 du matin
15 3 * * 1 /usr/bin/backup
# exécution à la 15ème minute de chaque heure
15 * * * * commande
# exécution tous les matins du lundi au vendredi à 7 h 30
30 7 * * 1-5 commande
# exécution tous les quarts d'heure de 15h à 19h du lundi au vendredi
# seulement en 1ère quinzaine du troisième trimestre
0,15,30,45 15-19 1-15 7-9 1-5 commande
# trouver puis nettoyer le répertoire /tmp des vieux fichiers (non modifiés
# depuis 31 jours) tous les 1er jour de chaque mois, à 2 heures du matin
0 2 1 * * find /tmp -atime 31 -exec rm -f {} ;

Syntaxe de la commande crontab

crontab [-u user] file

Permet de soumettre à cron le fichier contenant les commandes et leur périodicité de traitement

L'option -u demande à cron de traiter l'exécution des comandes au nom de l'utilisateur « user », en prenant notamment en compte son environement ( variables , alias ,...)


crontab [-u user] [-l | -r | -e][-i] [-s]

-l : liste les taches prisent en charge par cron

-r : supprime le traitment de ces taches par cronz

-e : lance l'editeur définit par les variables d'environnement : VISUAL or EDITOR

-i : interactivité , demande à l'utilisateur confirmation pour la suppression des tâches lorsqu'on utilise l'option -r


La réexécution de crontab avec un nouveau fichier en argument supprime toutes les commandes précédemment prisent en charge au profit de la ou des nouvelles commandes.


Pour soumettre différentes commandes avec des périodicités différentes,

il faut créer dans le même fichier de définition autant de ligne que de commandes à traiter et définir pour chacune la périodicité de traitement.