The manual Page
English version
accueil | glossaire | downloads | liens ]
 

Cron et crontab

A quoi ça sert ?

Cron [crone] est un systême qui permet à un utilisateur d'exécuter des commandes Unix à des intervalles de temps donnés. L'intérêt d'un tel outil se situe au niveau des tâches d'administration d'un serveur : un administrateur va par exemple l'utiliser pour lancer toutes les nuits une sauvegarde complète de ses serveurs.

Comment ça marche ?

Le systême cron fonctionne sous Unix grâce au démon crond [cronedé ou cronedi]. Ce programme est lancé sur le serveur une bonne fois pour toute et pour tout le monde. Les utilisateurs utilisent un petit utilitaire, crontab [cronetab] , pour configurer crond. Seul problème : crontab est le seul programme utilisable et il utilise souvent vi...

Crontab va donner des instructions à crond : le moment auquel il faut exécuter une certaine commande, et avec les droits de tel utilisateur. Il va de soi qu'un utilisateur donné ne peut pas demander à crond exécuter des commandes avec les droits d'un autre utilisateur, ce serait trop dangereux.

Utilisation de crontab

Pour utiliser crontab, il est indispensable de savoir utiliser vi. Mais heureusement, si vi ne vous convient pas, vous pouvez changer d'éditeur en faisant pointer la variable d'environnement EDITOR vers un nouvel éditeur.

La première chose à faire est de se logger correctement sous l'utilisateur qui devra exécuter les commandes. Il est possible pour le super-utilisateur d'utiliser l'argument -u nom_user pour demander à crond d'exécuter les commandes avec les droits de nom_user.

Pour lancer crontab et configurer crond, il suffit de taper : crontab -e et on tombe sur un écran vi. Les paramètres sont pris en compte dès que l'on quitte vi.

Configuration du démon

Les lignes de crontab sont de deux genres : des commandes cron qui sont les commandes système à exécuter et à quel moment, et des (re)définitions de variables d'environnement.

Les commentaires sont possibles avec #.

Les commandes cron

On donne ligne par ligne les commandes à exécuter. Les lignes ont le format suivant :

moment        commande

Les commandes sont tout simplement celle que l'utilisateur taperait s'il les exécutait lui-même.

Un moment se décompose en 5 champs :

champ valeurs possibles
minute 0-59
heure 0-23
jour du mois 1-31
mois 1-12
jour de la semaine 0-7 (0 et 7 pour dimanche) pour Linux. Pour les autres Unix, consulter le manuel pour la signification des chiffres.

Chaque champ est séparé par un espace et plusieurs éléments du même type sont séparés par des virgules (sans espace). une étoile (*) signifie : "pour tous". Exemple sous Linux :

0,10,20,30,40,50 * 1 * 7 /usr/bin/foo

Cette ligne signifie : "exécute /usr/bin/foo toutes les 0, 10, 20... minutes de toutes les heures du premier jour de chaque mois qui doit être un lundi (tous les ans)...". La combinaison est assez étrange de par son sens, mais c'est relativement puissant. Le principe en gros est de ne paramétrer que les éments qui sont intéressants et de mettre une * pour les autres. Pour lancer foo toutes les minutes, il suffit de taper :

* * * * * /usr/bin/foo

La plus petite fréquence avec laquelle on exécute une commande est donc de 1 minute.

Variables d'environnement

Les lignes de crontab permettent aussi de (re)définir des variables d'environnement pour l'exécution des commandes cron. Cela se fait très simplement :

VARIABLE=VALEUR

Cela va attribuer la valeur VALEUR à la variable d'environnement VARIABLE. Seule la variable LOGNAME ne peut être (re)définie. Si vous mettez des espaces dans la valeur, il est préférable d'encadrer celle-ci par des guillemets.

Exemple sous Linux :

TOTO=VALEUR
0,10,20,30,40,50 * 1 * 7 /usr/bin/foo

ATTENTION !!! les fichiers de profile des utilisateurs (.profile par exemple) ne sont pas lus avant l'exécution des commandes par cron. Cela peut entraîner des comportements étranges des scripts et difficiles à comprendre. Pour résoudre le problème, il faut sourcer ce fichier de profile avant de lancer la commande. Par exemple :

* * * * * . $HOME/.profile; /usr/bin/foo

Références

Les manuels Unix :


format imprimable format imprimable



Copyright © 2000-2006 themanualpage.org - Ce site est soumis aux conditions décrites dans les licences GNU GPL et FDL.