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 Il lit toutes les minutes les fichiers présents dans le répertoire /var/spool/cron (et aussi le fichier /etc/crontab ) , pour voir si des tâches doivent être exécutées. Chaque action de crond ajoute une ligne de message dans le fichier /var/log/cron , qu'il faut purger de temps en temps ... par une commande crontab ! Par défaut si une commande produit un affichage, il est dirigé vers la messagerie , mais sa vocation est de travailler en batch ( indépendemment de l'ouverture d'une session )
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.
Date de création : 26/03/2007 @ 18:30
Dernière modification : 14/03/2008 @ 07:43
Catégorie :
Page lue 4868 fois
Prévisualiser la page
Imprimer la page
|