« Programmation de travaux avec at cron anacron » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
 
(8 versions intermédiaires par 3 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
[[Category:Outils d'administration]]
[[Catégorie:Administration système]]
 
= Programmation de travaux =
= Programmation de travaux =


<div class="leatitre">Programmation de travaux</div><div class="leapar">par [mailto:anne@lea-linux.org Anne]</div><div class="leadesc">Où comment rendre son pingouin autonome :)</div>
<div class="leatitre">Programmation de travaux</div><div class="leapar">par [mailto:anne@lea-linux.org Anne]</div><div class="leadesc">Où comment rendre son manchot autonome :)</div>
----
----


Ligne 13 : Ligne 14 :
Votre système dispose de plusieurs outils de programmation de tâche en fonction de ce que vous souhaitez réaliser :
Votre système dispose de plusieurs outils de programmation de tâche en fonction de ce que vous souhaitez réaliser :


* <code>at</code> : permet l'exécution d'une tâche donnée à un moment donné, et ce, une seule fois. Si la machine n'est pas allumée à ce moment-là, la tâche ne sera pas exécutée. Toutefois, dès que la machine est rallumée, elle est exécutée. La commande est utilisable ''par root et/ou tout autre utilisateur'' déclaré sur la machine. <br />'''Exemple :''' programmer la sauvegarde de /home le 25 décembre à 23h30.
* <tt>at</tt> : permet l'exécution d'une tâche donnée à un moment donné, et ce, une seule fois. Si la machine n'est pas allumée à ce moment-là, la tâche ne sera pas exécutée. Toutefois, dès que la machine est rallumée, elle est exécutée. La commande est utilisable ''par root et/ou tout autre utilisateur'' déclaré sur la machine. <br />'''Exemple :''' programmer la sauvegarde de /home le 25 décembre à 23h30.
* <code>cron</code> : permet l'exécution d'une ou plusieurs tâches à des moments selon un intervalle de temps fixé et répété. Si la machine n'est pas allumée à ce moment-là, la tâche ne sera pas exécutée. La commande est utilisable par ''root et/ou tout autre utilisateur'' déclaré sur la machine. <br />'''Exemple :''' programmer la sauvegarde de /home tous les jours à 23h30.
* <tt>cron</tt> : permet l'exécution d'une ou plusieurs tâches à des moments selon un intervalle de temps fixé et répété. Si la machine n'est pas allumée à ce moment-là, la tâche ne sera pas exécutée. La commande est utilisable par ''root et/ou tout autre utilisateur'' déclaré sur la machine. <br />'''Exemple :''' programmer la sauvegarde de /home tous les jours à 23h30.
* <code>anacron</code> : permet l'exécution d'une ou plusieurs tâches après une période de temps déterminée. Si la machine n'est pas allumée à ce moment-là, la tâche sera exécutée dés que possible. La commande est utilisable ''uniquement par root''. <br />'''Exemple :''' programmer la sauvegarde de /home au bout d'une période de 7 jours. Si la machine reste éteinte 9 jours, la tâche s'exécute lors du démarrage de la machine au 10e jour..
* <tt>anacron</tt> : permet l'exécution d'une ou plusieurs tâches après une période de temps déterminée. Si la machine n'est pas allumée à ce moment-là, la tâche sera exécutée dés que possible. La commande est utilisable ''uniquement par root''. <br />'''Exemple :''' programmer la sauvegarde de /home au bout d'une période de 7 jours. Si la machine reste éteinte 9 jours, la tâche s'exécute lors du démarrage de la machine au 10e jour..


== La commande <code>at</code> ==
== La commande <tt>at</tt> ==


Comme on l'a vu plus haut, <code>at</code> permet de programmer l'exécution d'une tâche à un moment donné.
Comme on l'a vu plus haut, <tt>at</tt> permet de programmer l'exécution d'une tâche à un moment donné.


=== Fonctionnement ===
=== Fonctionnement ===


C'est le démon <code>atd</code> qui est en attente sur votre machine, qui se charge d'exécuter toutes les tâches planifiées avec <code>at</code>. Comme tous les services, on le retrouve dans le répertoire <code>/etc/init.d</code> (parfois c'est un lien vers <code>/etc/rc.d/init.d</code>). En cas de dysfonctionnement de <code>at</code>, il convient de vérifier, notamment, que le démon <code>atd</code> est bien lancé :
C'est le démon <tt>atd</tt> qui est en attente sur votre machine, qui se charge d'exécuter toutes les tâches planifiées avec <tt>at</tt>. Comme tous les services, on le retrouve dans le répertoire <tt>/etc/init.d</tt> (parfois c'est un lien vers <tt>/etc/rc.d/init.d</tt>). En cas de dysfonctionnement de <tt>at</tt>, il convient de vérifier, notamment, que le démon <tt>atd</tt> est bien lancé :


root@pingu# /etc/rc.d/init.d/atd status <br /> atd (pid 818) en cours d'exécution
root@pingu# /etc/rc.d/init.d/atd status <br /> atd (pid 818) en cours d'exécution


Les travaux en attente d'exécution sont stockés dans la file d'attente située dans <code>/var/spool/at</code>.
Les travaux en attente d'exécution sont stockés dans la file d'attente située dans <tt>/var/spool/at</tt>.


=== Syntaxe ===
=== Syntaxe ===


'''Ajouter une programmation de tâche''' : <code>at</code>. Deux façon de l'utiliser : avec une ligne de commande ou un fichier contenant un script à exécuter.
'''Ajouter une programmation de tâche''' : <tt>at</tt>. Deux façon de l'utiliser : avec une ligne de commande ou un fichier contenant un script à exécuter.


'''Syntaxe''' :
'''Syntaxe''' :


# <u>'''commande'''</u> : <code>at HEURE</code><br /> La commande est ensuite saisie en mode interactif. Vous pouvez saisir autant de lignes que nécessaire et terminer par <span class="key">Ctrl+D</span> pour obtenir le <code>End Of Text</code>. <br />'''Exemple''' : programmer l'affichage de "coucou" à 23h sur la console 5
# <u>'''commande'''</u> : <tt>at HEURE</tt><br /> La commande est ensuite saisie en mode interactif. Vous pouvez saisir autant de lignes que nécessaire et terminer par <span class="key">Ctrl+D</span> pour obtenir le <tt>End Of Text</tt>. <br />'''Exemple''' : programmer l'affichage de "coucou" à 23h sur la console 5
anne@pingu$ at 23:00 <br /> warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh <br /> at> echo coucou > /dev/pts/5<EOT>
anne@pingu$ at 23:00 <br /> warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh <br /> at> echo coucou > /dev/pts/5<EOT>
# <u>'''fichier'''</u> : <code>at -f fichier HEURE</code><br />'''Exemple''' : programmer l'exécution du script <code>/home/anne/sauve</code> à 23h.
# <u>'''fichier'''</u> : <tt>at -f fichier HEURE</tt><br />'''Exemple''' : programmer l'exécution du script <tt>/home/anne/sauve</tt> à 23h.
anne@pingu$ at -f /home/anne/sauve c23:00
anne@pingu$ at -f /home/anne/sauve c23:00


'''Le format de <code>HEURE</code>''' est commun aux 2 notations et permet une syntaxe assez large. Ce qui est utilisable :
'''Le format de <tt>HEURE</tt>''' est commun aux 2 notations et permet une syntaxe assez large. Ce qui est utilisable :


* <code>HHMM ou HH:MM</code><br />
* <tt>HHMM ou HH:MM</tt><br />
* <code>midnight / noon / teatime</code> : minuit / midi / 16h (sacrés anglais ;) )
* <tt>midnight / noon / teatime</tt> : minuit / midi / 16h (sacrés anglais ;) )
* <code>MMJJAA ou MM/JJ/AA ou MM.JJ.AA</code> : attention, les jours sont à noter après le mois (logique non ? :) )
* <tt>MMJJAA ou MM/JJ/AA ou JJ.MM.AA</tt> : (pour ceux qui mettent le jour avant le mois)
* <code>now + x minutes / hours / days / weeks</code> : x minutes / heures / jours / semaines à partir de maintenant
* <tt>now + x minutes / hours / days / weeks</tt> : x minutes / heures / jours / semaines à partir de maintenant


'''Lister les tâches programmées''' au moyen de <code>at</code> : <code>atq</code><br />'''Exemple''' :
'''Lister les tâches programmées''' au moyen de <tt>at</tt> : <tt>atq</tt><br />'''Exemple''' :


root@pingu# atq <br /> 4 2002-12-11 02:10 a root <br /> 5 2002-12-11 02:15 a root <br /> 6 2002-12-11 02:20 a root
root@pingu# atq <br /> 4 2002-12-11 02:10 a root <br /> 5 2002-12-11 02:15 a root <br /> 6 2002-12-11 02:20 a root
Ligne 53 : Ligne 54 :
Dans ce cas de figure, on a 3 tâches programmées avec at par root. La colonne de gauche indique le numéro de job attribué à la tâche (par ordre croissant d'arrivée dans la file).
Dans ce cas de figure, on a 3 tâches programmées avec at par root. La colonne de gauche indique le numéro de job attribué à la tâche (par ordre croissant d'arrivée dans la file).


'''Supprimer''' une ou plusieurs tâches programmées en attente d'exécution : <code>atrm n°job</code><br />'''Exemple''' :
'''Supprimer''' une ou plusieurs tâches programmées en attente d'exécution : <tt>atrm n°job</tt><br />'''Exemple''' :


root@pingu# atrm 6
root@pingu# atrm 6
Ligne 59 : Ligne 60 :
=== Contrôle de l'utilisation de la commande ===
=== Contrôle de l'utilisation de la commande ===


La commande <code>at</code> est accessible à root et aux utilisateurs déclarés sur la machine. Toutefois vous avez à votre disposition 2 fichiers : <code>/etc/at.allow</code> (pour autoriser spécifiquement des utilisateurs à utiliser <code>at</code>) et/ou <code>/etc/at.deny</code> (pour interdire spécifiquement à des utilisateurs d'utiliser <code>at</code>). Si aucun des 2 fichiers n'existe, seul root peut utiliser la commande. Par défaut, il existe souvent un fichier <code>/etc/at.deny</code> vide qui autorise ainsi l'utilisation de cette commande par tous les utilisateurs (puisque personne n'est interdit).
La commande <tt>at</tt> est accessible à root et aux utilisateurs déclarés sur la machine. Toutefois vous avez à votre disposition 2 fichiers : <tt>/etc/at.allow</tt> (pour autoriser spécifiquement des utilisateurs à utiliser <tt>at</tt>) et/ou <tt>/etc/at.deny</tt> (pour interdire spécifiquement à des utilisateurs d'utiliser <tt>at</tt>). Si aucun des 2 fichiers n'existe, seul root peut utiliser la commande. Par défaut, il existe souvent un fichier <tt>/etc/at.deny</tt> vide qui autorise ainsi l'utilisation de cette commande par tous les utilisateurs (puisque personne n'est interdit).


'''Exemple''' : je veux autoriser uniquement les utilisateurs root, pingu et anne à utiliser la commande
'''Exemple''' : je veux autoriser uniquement les utilisateurs root, pingu et anne à utiliser la commande
Ligne 65 : Ligne 66 :
root@pingu# cat /etc/at.allow <br /> root <br /> pingu <br /> anne
root@pingu# cat /etc/at.allow <br /> root <br /> pingu <br /> anne


Et, je ne crée pas de fichier <code>/etc/at.deny</code> donc, puisqu'il n'existe pas, personne n'a le droit d'utiliser <code>at</code> sauf ceux qui sont autorisés par <code>/etc/at.allow</code>.
Et, je ne crée pas de fichier <tt>/etc/at.deny</tt> donc, puisqu'il n'existe pas, personne n'a le droit d'utiliser <tt>at</tt> sauf ceux qui sont autorisés par <tt>/etc/at.allow</tt>.


== La commande cron ==
== La commande cron ==
Ligne 71 : Ligne 72 :
=== Fonctionnement de cron ===
=== Fonctionnement de cron ===


Tout comme <code>at</code>, <code>cron</code> permet de programmer des travaux à exécuter, mais ceci de manière récurrente. Par exemple pour faire une sauvegarde toutes les nuits à 2h30.
Tout comme <tt>at</tt>, <tt>cron</tt> permet de programmer des travaux à exécuter, mais ceci de manière récurrente. Par exemple pour faire une sauvegarde toutes les nuits à 2h30.


Les composantes pour le fonctionnement de cron sont :
Les composantes pour le fonctionnement de cron sont :


* '''un démon <code>crond</code>''' : c'est lui qui se charge d'exécuter les travaux progammées à l'aide de cron. Toutes les minutes ils vérifie la présence de nouveaux fichiers de configuration (crontab). Là encore, comme les autres services, il est situé dans <code>/etc/init.d</code>. Le démon doit être actif pour que les tâches puissent être exécutées.
* '''un démon <tt>crond</tt>''' : c'est lui qui se charge d'exécuter les travaux progammées à l'aide de cron. Toutes les minutes ils vérifie la présence de nouveaux fichiers de configuration (crontab). Là encore, comme les autres services, il est situé dans <tt>/etc/init.d</tt>. Le démon doit être actif pour que les tâches puissent être exécutées.
root@pingu# /etc/rc.d/init.d/crond status <br /> crond (pid 769) en cours d'exécution
root@pingu# /etc/rc.d/init.d/crond status <br /> crond (pid 769) en cours d'exécution
* '''un fichier de configuration, la <code>crontab</code>''' : il contient les travaux programmés et la date d'exécution. Il y a une <code>crontab</code> par utilisateur ayant recours à <code>cron</code>. Ces fichiers sont situés (habituellement) dans <code>/var/spool/cron</code>.
* '''un fichier de configuration, la <tt>crontab</tt>''' : il contient les travaux programmés et la date d'exécution. Il y a une <tt>crontab</tt> par utilisateur ayant recours à <tt>cron</tt>. Ces fichiers sont situés (habituellement) dans <tt>/var/spool/cron</tt>.
* '''des commandes''' : elles vous permettent de manipuler le contenu de la <code>crontab</code> (c'est à dire de l'éditer, de la vider et de la modifier).
* '''des commandes''' : elles vous permettent de manipuler le contenu de la <tt>crontab</tt> (c'est à dire de l'éditer, de la vider et de la modifier).
* '''un fichier de log''' : le fichier <code>/var/log/cron</code> recense toutes les tâches programmées à l'aide de cron.
* '''un fichier de log''' : le fichier <tt>/var/log/cron</tt> recense toutes les tâches programmées à l'aide de cron.


=== Commandes et configuration de cron ===
=== Commandes et configuration de cron ===


==== <code>crontab</code> : le fichier de configuration de cron ====
==== <tt>crontab</tt> : le fichier de configuration de cron ====


Il existe une <code>crontab</code> par utilisateur. Seul root peut consulter chacune d'entre elles.
Il existe une <tt>crontab</tt> par utilisateur. Seul root peut consulter chacune d'entre elles.


'''Syntaxe :'''
'''Syntaxe :'''
Ligne 98 : Ligne 99 :
* 6<sup>ème</sup> colonne, la tâche à exécuter
* 6<sup>ème</sup> colonne, la tâche à exécuter


'''Exemple :''' pour excuter le script <code>/root/sauve.sh</code> tous les jours à 23h15 on mettra dans la <code>crontab</code> de root
'''Exemple :''' pour excuter le script <tt>/root/sauve.sh</tt> tous les jours à 23h15 on mettra dans la <tt>crontab</tt> de root


15    23    *    *     *    /root/sauve.sh
15    23    *   *     *   /root/sauve.sh


Les colonnes contenant la date d'exécution peuvent contenir divers formats pour indiquer la date (pour les exemples, on utilisera la colonne des minutes de la crontab) :
Les colonnes contenant la date d'exécution peuvent contenir divers formats pour indiquer la date (pour les exemples, on utilisera la colonne des minutes de la crontab) :


* <code><nowiki>*</nowiki></code> : toutes les valeurs de la plage de temps <br />'''Exemple''' : <code><nowiki>*</nowiki></code> indique toutes les minutes
* <tt><nowiki>*</nowiki></tt> : toutes les valeurs de la plage de temps <br />'''Exemple''' : <tt><nowiki>*</nowiki></tt> indique toutes les minutes
* 2 nombres séparés par un tiret : pour indiquer un intervalle de temps <br />'''Exemple''' : <code>0-15</code> indique toutes les minutes comprises entre 0 et 15
* 2 nombres séparés par un tiret : pour indiquer un intervalle de temps <br />'''Exemple''' : <tt>0-15</tt> indique toutes les minutes comprises entre 0 et 15
* 2 nombres ou plus séparés par des virgules : indique une liste de valeurs <br />'''Exemple''' : <code>0,15,30,45</code> indique les minutes 0, 15, 30 et 45 (c'est à dire toutes les quart d'heure).
* 2 nombres ou plus séparés par des virgules : indique une liste de valeurs <br />'''Exemple''' : <tt>0,15,30,45</tt> indique les minutes 0, 15, 30 et 45 (c'est à dire toutes les quart d'heure).
* combinaison de valeurs au moyen d'un pas (/) : permet par exemple de désigner toutes les valeurs paires. <br />'''Exemple''' :
* combinaison de valeurs au moyen d'un pas (/) : permet par exemple de désigner toutes les valeurs paires. <br />'''Exemple''' :
** <code><nowiki>*/2</nowiki></code> indique toutes les valeurs paires,
** <tt><nowiki>*/2</nowiki></tt> indique toutes les valeurs paires,
** <code>0-15/2</code> indique toutes les valeurs paires des minutes comprises entre 0 et 15.
** <tt>0-15/2</tt> indique toutes les valeurs paires des minutes comprises entre 0 et 15.


Il est bien sûr possible de combiner les différentes notations pour obtenir ce dont vous aurez besoin.
Il est bien sûr possible de combiner les différentes notations pour obtenir ce dont vous aurez besoin.
Ligne 115 : Ligne 116 :
==== les commandes ====
==== les commandes ====


Nous avons vu la syntaxe de la crontab. Pour éditer, modifier ou visualiser le contenu d'une <code>crontab</code>, il vous faut utiliser la commande <code>crontab</code> avec les options suivantes :
Nous avons vu la syntaxe de la crontab. Pour éditer, modifier ou visualiser le contenu d'une <tt>crontab</tt>, il vous faut utiliser la commande <tt>crontab</tt> avec les options suivantes :


* <code>crontab -l</code> : permet de visualiser le contenu de la <code>crontab</code> (en lecture uniquement).
* <tt>crontab -l</tt> : permet de visualiser le contenu de la <tt>crontab</tt> (en lecture uniquement).
* <code>crontab -e</code> : permet d'éditer la <code>crontab</code> et éventuellement de le modifier. La commande ouvre la <code>crontab</code> dans un éditeur (vi par défaut sinon celui définit par la variable d'environnement <code>EDITOR</code>)
* <tt>crontab -e</tt> : permet d'éditer la <tt>crontab</tt> et éventuellement de le modifier. La commande ouvre la <tt>crontab</tt> dans un éditeur (vi par défaut sinon celui définit par la variable d'environnement <tt>EDITOR</tt>)
* <code>crontab -r</code> : supprime la <code>crontab</code> dans <code>/var/spool/cron</code>
* <tt>crontab -r</tt> : supprime la <tt>crontab</tt> dans <tt>/var/spool/cron</tt>


'''Remarque''' : par défaut, les commandes crontab agissent sur votre <code>crontab</code> uniquement. (rappel : il y a autant de <code>crontab</code> que d'utilisateurs ayant définit des tâches à effectuer avec <code>cron</code>.) <br /> Toutefois l'administrateur (root) peut utiliser une option supplémentaire : <code>-u user</code>. Il spécifie ainsi la <code>crontab</code> de l'utilisateur qu'il veut éditer, modifier ou supprimer.
'''Remarque''' : par défaut, les commandes crontab agissent sur votre <tt>crontab</tt> uniquement. (rappel : il y a autant de <tt>crontab</tt> que d'utilisateurs ayant définit des tâches à effectuer avec <tt>cron</tt>.) <br /> Toutefois l'administrateur (root) peut utiliser une option supplémentaire : <tt>-u user</tt>. Il spécifie ainsi la <tt>crontab</tt> de l'utilisateur qu'il veut éditer, modifier ou supprimer.


'''Exemple''' : pour modifier la crontab de l'utilisateur <code>anne</code><br />
'''Exemple''' : pour modifier la crontab de l'utilisateur <tt>anne</tt><br />


root@pingu# crontab -u anne -e
root@pingu# crontab -u anne -e
Ligne 129 : Ligne 130 :
=== la crontab du système ===
=== la crontab du système ===


Lorsque vous installez votre distribution, une <code>crontab</code> particulière est crée, celle du système : <code>/etc/crontab</code>
Lorsque vous installez votre distribution, une <tt>crontab</tt> particulière est crée, celle du système : <tt>/etc/crontab</tt>
<code multi>
root@pingu# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/


root@pingu# cat /etc/crontab <br /> SHELL=/bin/bash <br /> PATH=/sbin:/bin:/usr/sbin:/usr/bin <br /> MAILTO=root <br /> HOME=/ <br /><br /> # run-parts <br /> 01 * * * * root run-parts /etc/cron.hourly <br /> 02 4 * * * root run-parts /etc/cron.daily <br /> 22 4 * * 0 root run-parts /etc/cron.weekly <br /> 42 4 1 * * root run-parts /etc/cron.monthly
# 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
</tt>
Le fichier définit tout d'abord un certain nombre de variables pour l'exécution des tâches système : <tt>SHELL</tt>, <tt>PATH</tt>, <tt>MAILTO</tt>, <tt>HOME</tt>(la définition de variables est également possible dans une <tt>crontab</tt> ordinaire, mais beaucoup plus rarement utilisé.). La suite du fichier utilise ensuite la syntaxe vue ci-dessus.


Le fichier définit tout d'abord un certain nombre de variables pour l'exécution des tâches système : <code>SHELL</code>, <code>PATH</code>, <code>MAILTO</code>, <code>HOME</code>(la définition de variables est également possible dans une <code>crontab</code> ordinaire, mais beaucoup plus rarement utilisé.). La suite du fichier utilise ensuite la syntaxe vue ci-dessus.
L'exécution des tâches utilise un script particulier : <tt>/usr/bin/run-parts</tt>. Il s'agit d'un script bash qui exécute toutes les commandes situées dans le répertoire passé en argument. On remarquera que la temporisation utilisée pour programmer chacune de ces lignes correspond à des tâches devant s'exécuter toutes les heures, les jours, les semaines, les mois.
 
L'exécution des tâches utilise un script particulier : <code>/usr/bin/run-parts</code>. Il s'agit d'un script bash qui exécute toutes les commandes situées dans le répertoire passé en argument. On remarquera que la temporisation utilisée pour programmer chacune de ces lignes correspond à des tâches devant s'exécuter toutes les heures, les jours, les semaines, les mois.
 
'''Exemple''' : la crontab système exécute tous les jours <code>run-parts /etc/cron.daily</code>. <br /> Le répertoire <code>/etc/cron.daily</code> contient les commandes suivantes :
 
root@pingu# ls /etc/cron.daily <br /> 00-logwatch 0anacron makewhatis.cron slocate.cron tmpwatch <br /> 00webalizer logrotate rpm tetex.cron


'''Exemple''' : la crontab système exécute tous les jours <tt>run-parts /etc/cron.daily</tt>. <br /> Le répertoire <tt>/etc/cron.daily</tt> contient les commandes suivantes :
<code multi>
root@pingu# ls /etc/cron.daily
00-logwatch 0anacron makewhatis.cron slocate.cron tmpwatch
00webalizer logrotate rpm tetex.cron
</tt>
Ce sont donc tous les scripts qui seront exécutés tous les jours à 4h02.
Ce sont donc tous les scripts qui seront exécutés tous les jours à 4h02.


=== Contrôle de l'utilisation de la commande cron ===
=== Contrôle de l'utilisation de la commande cron ===


Tout comme pour la commande <code>at</code>, la commande la commande <code>cron</code> est accessible à root et aux utilisateurs déclarés sur la machine. Toutefois vous avez là encore à votre disposition 2 fichiers : <code>/etc/cron.allow</code> et/ou <code>/etc/cron.deny</code> (qui fonctionne comme ceux de <code>at</code>). Si aucun des 2 fichiers n'existe, le comportement peut varier d'une distribution à une autre : soit root seul peut utiliser la commande, soit aucune restriction n'est appliquée.
Tout comme pour la commande <tt>at</tt>, la commande la commande <tt>cron</tt> est accessible à root et aux utilisateurs déclarés sur la machine. Toutefois vous avez là encore à votre disposition 2 fichiers : <tt>/etc/cron.allow</tt> et/ou <tt>/etc/cron.deny</tt> (qui fonctionne comme ceux de <tt>at</tt>). Si aucun des 2 fichiers n'existe, le comportement peut varier d'une distribution à une autre : soit root seul peut utiliser la commande, soit aucune restriction n'est appliquée.


'''Exemple''' : je veux autoriser uniquement les utilisateurs root, pingu et anne à utiliser la commande <br />
'''Exemple''' : je veux autoriser uniquement les utilisateurs root, pingu et anne à utiliser la commande
<code multi>
root@pingu# cat /etc/cron.allow
root
pingu
anne
</tt>
Et, je ne crée pas de fichier <tt>/etc/at.deny</tt>.


root@pingu# cat /etc/cron.allow <br /> root <br /> pingu <br /> anne
== la commande <tt>anacron</tt> ==


Et, je ne crée pas de fichier <code>/etc/at.deny</code>.
=== Fonctionnement de <tt>anacron</tt> ===


== la commande <code>anacron</code> ==
Contrairement à <tt>cron</tt>, <tt>anacron</tt> ne fonctionne pas avec un démon. Il s'agit d'une commande lancée au démarrage (<tt>/usr/sbin/anacron</tt>). Elle est souvent lancée comme un service, on peut donc, dans ce cas, trouver son script de démarrage dans <tt>/etc/init.d</tt>


=== Fonctionnement de <code>anacron</code> ===
<tt>anacron</tt> permet l'exécution d'une tâche au bout d'une période de temps qui se serait écoulée. Contrairement à <tt>cron</tt>, la spécification de la période ne permet pas autant de précision. Toutefois on a vu qu'une tâche programmée à l'aide de cron nécessite que le démon <tt>crond</tt> soit activé. Donc si la machine est éteinte, la tâche ne sera pas exécutée.
 
Contrairement à <code>cron</code>, <code>anacron</code> ne fonctionne pas avec un démon. Il s'agit d'une commande lancée au démarrage (<code>/usr/sbin/anacron</code>). Elle est souvant lancée comme un service, on peut donc, dans ce cas, trouver son script de démarrage dans <code>/etc/init.d</code>
 
<code>anacron</code> permet l'exécution d'une tâche au bout d'une période de temps qui se serait écoulée. Contrairement à <code>cron</code>, la spécification de la période ne permet pas autant de précision. Toutefois on a vu qu'une tâche programmée à l'aide de cron nécessite que le démon <code>crond</code> soit activé. Donc si la machine est éteinte, la tâche ne sera pas exécutée.


Imaginez que vous programmiez une tâche pour qu'elle s'exécute toutes les semaines. Votre machine est éteinte durant 10 jours, la commande sera donc exécutée au prochain redémarrage.
Imaginez que vous programmiez une tâche pour qu'elle s'exécute toutes les semaines. Votre machine est éteinte durant 10 jours, la commande sera donc exécutée au prochain redémarrage.


Attention <code>anacron</code> est un utilitaire strictement réservé à root. Le fichier de configuration est <code>/etc/anacrontab</code>.
Attention <tt>anacron</tt> est un utilitaire strictement réservé à root. Le fichier de configuration est <tt>/etc/anacrontab</tt>.


=== Le fichier de configuration : <code>anacrontab</code> ===
=== Le fichier de configuration : <tt>anacrontab</tt> ===


Il a une syntaxe similaire à celle de la crontab, il faut donc mette une ligne par tâche à effectuer. Chaque ligne doit contenir 4 colonnes :
Il a une syntaxe similaire à celle de la crontab, il faut donc mette une ligne par tâche à effectuer. Chaque ligne doit contenir 4 colonnes :
Ligne 176 : Ligne 192 :
La ligne suivante :
La ligne suivante :


1    65   cron.daily   run-parts /etc/cron.daily
1    65  cron.daily  run-parts /etc/cron.daily


signifie que la commande <code>run-parts /etc/cron.daily</code> sera exécutée 1 fois par jour, chaque tâche sera séparées des autres d'au moins 65 minutes.
signifie que la commande <tt>run-parts /etc/cron.daily</tt> sera exécutée 1 fois par jour, chaque tâche sera séparées des autres d'au moins 65 minutes.


'''Exemple :''' ci-dessous un exemple de anacrontab
'''Exemple :''' ci-dessous un exemple de anacrontab
Ligne 187 : Ligne 203 :
7 70 cron.weekly run-parts /etc/cron.weekly
7 70 cron.weekly run-parts /etc/cron.weekly
30 75 cron.monthly run-parts /etc/cron.monthly
30 75 cron.monthly run-parts /etc/cron.monthly
</code>
</tt>


== conclusion ==
== conclusion ==
Ligne 194 : Ligne 210 :


N'hésitez pas à me faire parvenir vos remarques et ajouts divers sur le contenu de cet article.
N'hésitez pas à me faire parvenir vos remarques et ajouts divers sur le contenu de cet article.
<br/>
<br/>
'''<b>[[Admin-index|@ Retour à la rubrique Administration système]]</b>'''
<br/>


<div class="merci">Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Anne le 01/01/2003.</div>
<div class="merci">Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Anne le 01/01/2003.</div>

Dernière version du 3 décembre 2023 à 21:48


Programmation de travaux

Programmation de travaux
par Anne
Où comment rendre son manchot autonome :)

Pourquoi ces outils de programmation ?

Imaginez que vous souhaitez lancer une tâche durant la nuit, ou bien effectuer des sauvegardes régulières de vos données, remettre à jour la base de vos packages... L'objectif de cet article est de vous présenter le fonctionnement et le paramétrage de trois outils de programmation sous Linux.

Les différents outils de programmation de tâches

Votre système dispose de plusieurs outils de programmation de tâche en fonction de ce que vous souhaitez réaliser :

  • at : permet l'exécution d'une tâche donnée à un moment donné, et ce, une seule fois. Si la machine n'est pas allumée à ce moment-là, la tâche ne sera pas exécutée. Toutefois, dès que la machine est rallumée, elle est exécutée. La commande est utilisable par root et/ou tout autre utilisateur déclaré sur la machine.
    Exemple : programmer la sauvegarde de /home le 25 décembre à 23h30.
  • cron : permet l'exécution d'une ou plusieurs tâches à des moments selon un intervalle de temps fixé et répété. Si la machine n'est pas allumée à ce moment-là, la tâche ne sera pas exécutée. La commande est utilisable par root et/ou tout autre utilisateur déclaré sur la machine.
    Exemple : programmer la sauvegarde de /home tous les jours à 23h30.
  • anacron : permet l'exécution d'une ou plusieurs tâches après une période de temps déterminée. Si la machine n'est pas allumée à ce moment-là, la tâche sera exécutée dés que possible. La commande est utilisable uniquement par root.
    Exemple : programmer la sauvegarde de /home au bout d'une période de 7 jours. Si la machine reste éteinte 9 jours, la tâche s'exécute lors du démarrage de la machine au 10e jour..

La commande at

Comme on l'a vu plus haut, at permet de programmer l'exécution d'une tâche à un moment donné.

Fonctionnement

C'est le démon atd qui est en attente sur votre machine, qui se charge d'exécuter toutes les tâches planifiées avec at. Comme tous les services, on le retrouve dans le répertoire /etc/init.d (parfois c'est un lien vers /etc/rc.d/init.d). En cas de dysfonctionnement de at, il convient de vérifier, notamment, que le démon atd est bien lancé :

root@pingu# /etc/rc.d/init.d/atd status
atd (pid 818) en cours d'exécution

Les travaux en attente d'exécution sont stockés dans la file d'attente située dans /var/spool/at.

Syntaxe

Ajouter une programmation de tâche : at. Deux façon de l'utiliser : avec une ligne de commande ou un fichier contenant un script à exécuter.

Syntaxe :

  1. commande : at HEURE
    La commande est ensuite saisie en mode interactif. Vous pouvez saisir autant de lignes que nécessaire et terminer par Ctrl+D pour obtenir le End Of Text.
    Exemple : programmer l'affichage de "coucou" à 23h sur la console 5

anne@pingu$ at 23:00
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
at> echo coucou > /dev/pts/5<EOT>

  1. fichier : at -f fichier HEURE
    Exemple : programmer l'exécution du script /home/anne/sauve à 23h.

anne@pingu$ at -f /home/anne/sauve c23:00

Le format de HEURE est commun aux 2 notations et permet une syntaxe assez large. Ce qui est utilisable :

  • HHMM ou HH:MM
  • midnight / noon / teatime : minuit / midi / 16h (sacrés anglais ;) )
  • MMJJAA ou MM/JJ/AA ou JJ.MM.AA : (pour ceux qui mettent le jour avant le mois)
  • now + x minutes / hours / days / weeks : x minutes / heures / jours / semaines à partir de maintenant

Lister les tâches programmées au moyen de at : atq
Exemple :

root@pingu# atq
4 2002-12-11 02:10 a root
5 2002-12-11 02:15 a root
6 2002-12-11 02:20 a root

Dans ce cas de figure, on a 3 tâches programmées avec at par root. La colonne de gauche indique le numéro de job attribué à la tâche (par ordre croissant d'arrivée dans la file).

Supprimer une ou plusieurs tâches programmées en attente d'exécution : atrm n°job
Exemple :

root@pingu# atrm 6

Contrôle de l'utilisation de la commande

La commande at est accessible à root et aux utilisateurs déclarés sur la machine. Toutefois vous avez à votre disposition 2 fichiers : /etc/at.allow (pour autoriser spécifiquement des utilisateurs à utiliser at) et/ou /etc/at.deny (pour interdire spécifiquement à des utilisateurs d'utiliser at). Si aucun des 2 fichiers n'existe, seul root peut utiliser la commande. Par défaut, il existe souvent un fichier /etc/at.deny vide qui autorise ainsi l'utilisation de cette commande par tous les utilisateurs (puisque personne n'est interdit).

Exemple : je veux autoriser uniquement les utilisateurs root, pingu et anne à utiliser la commande

root@pingu# cat /etc/at.allow
root
pingu
anne

Et, je ne crée pas de fichier /etc/at.deny donc, puisqu'il n'existe pas, personne n'a le droit d'utiliser at sauf ceux qui sont autorisés par /etc/at.allow.

La commande cron

Fonctionnement de cron

Tout comme at, cron permet de programmer des travaux à exécuter, mais ceci de manière récurrente. Par exemple pour faire une sauvegarde toutes les nuits à 2h30.

Les composantes pour le fonctionnement de cron sont :

  • un démon crond : c'est lui qui se charge d'exécuter les travaux progammées à l'aide de cron. Toutes les minutes ils vérifie la présence de nouveaux fichiers de configuration (crontab). Là encore, comme les autres services, il est situé dans /etc/init.d. Le démon doit être actif pour que les tâches puissent être exécutées.

root@pingu# /etc/rc.d/init.d/crond status
crond (pid 769) en cours d'exécution

  • un fichier de configuration, la crontab : il contient les travaux programmés et la date d'exécution. Il y a une crontab par utilisateur ayant recours à cron. Ces fichiers sont situés (habituellement) dans /var/spool/cron.
  • des commandes : elles vous permettent de manipuler le contenu de la crontab (c'est à dire de l'éditer, de la vider et de la modifier).
  • un fichier de log : le fichier /var/log/cron recense toutes les tâches programmées à l'aide de cron.

Commandes et configuration de cron

crontab : le fichier de configuration de cron

Il existe une crontab par utilisateur. Seul root peut consulter chacune d'entre elles.

Syntaxe :

Le fichier doit comporter une tâche à programmer par ligne. Chaque ligne doit comporter obligatoirement 6 colonnes :

  • 1ère colonne, les minutes : de 0 à 59
  • 2ème colonne, les heures : de 0 à 23
  • 3ème colonne, le jour du mois : de 0 à 31
  • 4ème colonne, les mois : de 0 à 12
  • 5ème colonne, le jour de la semaine : de 0 à 7 (dimanche correspondant à 0 ou 7)
  • 6ème colonne, la tâche à exécuter

Exemple : pour excuter le script /root/sauve.sh tous les jours à 23h15 on mettra dans la crontab de root

15 23 * * * /root/sauve.sh

Les colonnes contenant la date d'exécution peuvent contenir divers formats pour indiquer la date (pour les exemples, on utilisera la colonne des minutes de la crontab) :

  • * : toutes les valeurs de la plage de temps
    Exemple : * indique toutes les minutes
  • 2 nombres séparés par un tiret : pour indiquer un intervalle de temps
    Exemple : 0-15 indique toutes les minutes comprises entre 0 et 15
  • 2 nombres ou plus séparés par des virgules : indique une liste de valeurs
    Exemple : 0,15,30,45 indique les minutes 0, 15, 30 et 45 (c'est à dire toutes les quart d'heure).
  • combinaison de valeurs au moyen d'un pas (/) : permet par exemple de désigner toutes les valeurs paires.
    Exemple :
    • */2 indique toutes les valeurs paires,
    • 0-15/2 indique toutes les valeurs paires des minutes comprises entre 0 et 15.

Il est bien sûr possible de combiner les différentes notations pour obtenir ce dont vous aurez besoin.

les commandes

Nous avons vu la syntaxe de la crontab. Pour éditer, modifier ou visualiser le contenu d'une crontab, il vous faut utiliser la commande crontab avec les options suivantes :

  • crontab -l : permet de visualiser le contenu de la crontab (en lecture uniquement).
  • crontab -e : permet d'éditer la crontab et éventuellement de le modifier. La commande ouvre la crontab dans un éditeur (vi par défaut sinon celui définit par la variable d'environnement EDITOR)
  • crontab -r : supprime la crontab dans /var/spool/cron

Remarque : par défaut, les commandes crontab agissent sur votre crontab uniquement. (rappel : il y a autant de crontab que d'utilisateurs ayant définit des tâches à effectuer avec cron.)
Toutefois l'administrateur (root) peut utiliser une option supplémentaire : -u user. Il spécifie ainsi la crontab de l'utilisateur qu'il veut éditer, modifier ou supprimer.

Exemple : pour modifier la crontab de l'utilisateur anne

root@pingu# crontab -u anne -e

la crontab du système

Lorsque vous installez votre distribution, une crontab particulière est crée, celle du système : /etc/crontab root@pingu# cat /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/

  1. 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 Le fichier définit tout d'abord un certain nombre de variables pour l'exécution des tâches système : SHELL, PATH, MAILTO, HOME(la définition de variables est également possible dans une crontab ordinaire, mais beaucoup plus rarement utilisé.). La suite du fichier utilise ensuite la syntaxe vue ci-dessus.

L'exécution des tâches utilise un script particulier : /usr/bin/run-parts. Il s'agit d'un script bash qui exécute toutes les commandes situées dans le répertoire passé en argument. On remarquera que la temporisation utilisée pour programmer chacune de ces lignes correspond à des tâches devant s'exécuter toutes les heures, les jours, les semaines, les mois.

Exemple : la crontab système exécute tous les jours run-parts /etc/cron.daily.
Le répertoire /etc/cron.daily contient les commandes suivantes : root@pingu# ls /etc/cron.daily 00-logwatch 0anacron makewhatis.cron slocate.cron tmpwatch 00webalizer logrotate rpm tetex.cron Ce sont donc tous les scripts qui seront exécutés tous les jours à 4h02.

Contrôle de l'utilisation de la commande cron

Tout comme pour la commande at, la commande la commande cron est accessible à root et aux utilisateurs déclarés sur la machine. Toutefois vous avez là encore à votre disposition 2 fichiers : /etc/cron.allow et/ou /etc/cron.deny (qui fonctionne comme ceux de at). Si aucun des 2 fichiers n'existe, le comportement peut varier d'une distribution à une autre : soit root seul peut utiliser la commande, soit aucune restriction n'est appliquée.

Exemple : je veux autoriser uniquement les utilisateurs root, pingu et anne à utiliser la commande root@pingu# cat /etc/cron.allow root pingu anne Et, je ne crée pas de fichier /etc/at.deny.

la commande anacron

Fonctionnement de anacron

Contrairement à cron, anacron ne fonctionne pas avec un démon. Il s'agit d'une commande lancée au démarrage (/usr/sbin/anacron). Elle est souvent lancée comme un service, on peut donc, dans ce cas, trouver son script de démarrage dans /etc/init.d

anacron permet l'exécution d'une tâche au bout d'une période de temps qui se serait écoulée. Contrairement à cron, la spécification de la période ne permet pas autant de précision. Toutefois on a vu qu'une tâche programmée à l'aide de cron nécessite que le démon crond soit activé. Donc si la machine est éteinte, la tâche ne sera pas exécutée.

Imaginez que vous programmiez une tâche pour qu'elle s'exécute toutes les semaines. Votre machine est éteinte durant 10 jours, la commande sera donc exécutée au prochain redémarrage.

Attention anacron est un utilitaire strictement réservé à root. Le fichier de configuration est /etc/anacrontab.

Le fichier de configuration : anacrontab

Il a une syntaxe similaire à celle de la crontab, il faut donc mette une ligne par tâche à effectuer. Chaque ligne doit contenir 4 colonnes :

  • 1ère colonne, intervalle : exprimé en jours, il indique l'intervalle de temps entre 2 exécution d'une tâche.
  • 2ème colonne, délai : exprimé en minutes, c'est le délai entre 2 tâches exécutées par anacron, pour éviter qu'elles ne s'exécutent en même temps.
  • 3ème colonne, étiquette : commentaire ajouté pour les logs de anacron
  • 4ème colonne, commande : tâche à exécuter

La ligne suivante :

1 65 cron.daily run-parts /etc/cron.daily

signifie que la commande run-parts /etc/cron.daily sera exécutée 1 fois par jour, chaque tâche sera séparées des autres d'au moins 65 minutes.

Exemple : ci-dessous un exemple de anacrontab root@pingu# cat /etc/anacrontab SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 1 65 cron.daily run-parts /etc/cron.daily 7 70 cron.weekly run-parts /etc/cron.weekly 30 75 cron.monthly run-parts /etc/cron.monthly

conclusion

Voilà présentés les principaux outils de programmation des tâches sous Linux. D'autres outils existent, comme fcron qui comblerait certaines failles de sécurité de cron

N'hésitez pas à me faire parvenir vos remarques et ajouts divers sur le contenu de cet article.



@ Retour à la rubrique Administration système

Cette page est issue de la documentation 'pré-wiki' de Léa a été convertie avec HTML::WikiConverter. Elle fut créée par Anne le 01/01/2003.

Copyright

Copyright © 01/01/2003, Anne

Creative Commons License
Creative Commons Attribution iconCreative Commons Share Alike iconCreative Commons Noncommercial
Ce document est publié sous licence Creative Commons
Attribution, Partage à l'identique, Contexte non commercial 2.0 :
http://creativecommons.org/licenses/by-nc-sa/2.0/fr/