1 Pour quoi faire
Crontab est un utilitaire bien utile et plutôt simple à mettre en oeuvre. Il permet de programmer des actions régulières sur votre machine. Par exemple est ce que tel process tourne toujours, est ce que ma ligne ADSL est toujours active, éventuellement faire des sauvegardes.
at permet quant à lui de lancer des actions à une heure donnée, un jour donné, mais sans répétition.
2 L'installation
Pas grand chose à dire sur l'installation de crontab sur votre machine, ni même de la commande at. Par défaut cela tourne déjà. Si ce n'est pas le cas installer les paquetages suivants :at-3.1.7-....rpm et crontabs-1.7-8mdk....rpm.
Vous devez voir le démon crond et atd tourner sur votre machine, si vous souhaitez les utiliser.
3 crontab
Un demon nommé cron lit le fichier (qui se trouve dans le répertoire /var/spool/cron) et exécute les commandes qui s'y trouvent.
Pour créer ce fichier taper crontab -e (crontab est une commande). Vous ouvrez alors vi et il vous reste à entrer votre ligne en respectant la syntaxe. Une fois sorti de vi (Escape puis :wq!), votre commande est mémorisée (vous obtenez le message crontab: installing new crontab). Pour visualiser toutes les crontab tapez crontab -l.
Lorsque vous créez une crontab, elle est créée pour l'utilisateur que vous êtes. Si vous souhaitez voir, créer, modifier ou détruire une crontab d'un autre utilisateur indiquer crontab -u toto -l (-l pour voir, -e pour créer ou modifier, -r pour détruire).
La syntaxe des entrées est la suivante :
<minute> <heure> <jour du mois> <mois> <jour de la semaine> <commande> (avec un espace entre chacun)
minute : de 0 à 59
heure : de 0 à 23
jour du mois de : 1 à 31
mois de : 1 à 12
jour de la semaine : de 0 à 6, 0 étant le dimanche et ainsi de suite.
commande : peut comporter plusieurs commandes.
les mois et les jours peuvent aussi être donnés avec les abréviations anglaises :jan,feb,... et mon,tue,...
On sépare les jours, les mois par des , (virgules), par exemple pour lancer une action tous les 15 et 30 du mois tapez 15,30 à la place de jour du mois.
Le - signifie jusqu'à, ainsi 15-30 signifie du 15 au 30.
Le / permet de spécifier une répétition, */3 indique toutes les 3 minutes.
* peut être utilisée et indique tous les jours de semaine, tous les mois, toutes les heures.
3 Exemples
0 1 1 * * commande veut dire que vous n'exécutez que le premier jour du mois à 1 heure.
0 1 * * mon commande veut dire une fois par semaine le lundi à 1 heure.
0 1 1,15 * * commande veut dire tous les 1 et 15 du mois à 1 heure.
0 1 1-15 * * commande veut dire tous les 15 premiers jours du mois à 1 heure.
0 1 */5 * * commande veut dire tous les 5 jours à 1 heure.
*/3 * * * * commande veut dire toutes les trois minutes.
La commande suivante efface tous les jours, les fichiers présents dans le répertoire /var/log depuis plus de 7 jours.
0 1 * * * find /var/log -atime 7 -exec rm -f {} \;
atime permet de trouver les fichiers non utilisés depuis 7 jours.
4 at
La commande at permet de lancer une commande un jour donné, à une heure donnée. Une fois que cette commande a été exécutée, elle n'existe plus. Pour utiliser la commande at taper at puis l'heure.
ainsi at 12:30 déclenchera la commande à 12 heures 30.
La syntaxe des entrées est la suivante :
at 12:30 11/30/00 déclenchera la commande le 30 novembre 2000 (le jour étant indiqué sous la forme mm/jj/aa.
at now + 1 hour déclenchera la commande dans 1 heure à partir de maintenant.
at 00:00 + 2 days pour exécuter la commande dans 2 jours à minuit.
Jusque là nous n'avons entré aucune commande à exécuter. Lorsque vous tapez la commande at 12:30, vous obtenez l'invite de la commande at
at 12:30
$ at 12:30
at>ping -c 1 192.168.0.1
at> ^D
$
vous avez alors le message suivant, qui vous indique que votre demande a été prise en compte, avec numéro d'ordre le 1.
job 1 at 2000-11-10 12:30
La commande va envoyer un ping sur la machine 192.168.0.1 à 12 heures 30 (j'avais pas d'autres idées sur le moment...!). On peut bien sur faire exécuter un script. Puis at envoi par mail le résultat de cette commande.
Si vous souhaitez voir ce qui va se passer taper at -c 1 (1 étant le numéro d'ordre).
Si vous ne connaissez plus toutes les commandes en attente tapez at -l (ou atq).
Pour supprimer une commande en attente atrm 1 (pour supprimer le job 1).
Attention un des grands risques lorsque l'on utilise at est de ne pas vérifier l'heure et le jour de l'exécution de la commande.
5 Contrôle
Dans le cas de at ou de crontab, il est possible de définir qui a le droit d'utiliser ces commandes. Pour cela il existe les fichiers /etc/cron.allow /etc/cron.deny et pour at /etc/at.allow et /etc/at.deny. Pour interdire par exemple l'utilisation de la commande at saisissez le nom des utilisateurs dans le fichiers at.deny (un par ligne).
6 Remarques
Il existe des interfaces graphiques pour créer, modifier, enlever des crontab, mais est-ce bien nécessaire ?
Si votre machine n'est pas allumée en permanence, il est alors possible que votre commande crontab ne puisse s'exécuter. Vous pouvez alors utiliser anacron (qui va vérifier les crontab non exécutées et les exécuter dès la remise en route de la machine).
TP 1 :
Créer une crontab qui puisse vérifier toutes les deux minutes si
squid tourne sur votre machine, sinon relancer squid, et envoyer un message à
l'administrateur.
TP 2 :
Créer une crontab qui sauvegarde et tar votre
répertoire home, toutes les nuits. (on ne souhaite pas perdre les fichiers des
nuits précédentes).
TP 3 :
Créer une crontab qui surveille si la ligne adsl est toujours
montée, si non la remonte.
© Philippe Chadefaux - 10/10/2000 -