{{tag>}}
======cron/crontab======
[[http://fr.wikipedia.org/wiki/Cron|Cron]] est un programme qui permet, sous Unix, d'automatiser des tâches en les programmant pour se lancer à une heure/date précise (l'équivalent du planificateur de taches sous Windows). On distingue le démon **crond** et l'utilitaire de configuration **crontab**.
Chaque utilisateur peut utiliser cron ; on peut limiter l'accès à l'utilitaire en créant/complétant les fichiers ''/etc/cron.allow'' (et ''/etc/cron.deny'' ) des noms d'utilisateurs adéquats. Le fichier ''cron.allow'' est prioritaire à ''cron.deny''.
Pour utiliser cron, on utilise ''crontab'', l'utilitaire d'édition et de vérification syntaxique des fichiers de configuration.
On peut **l**ister, **e**diter ou supp**r**imer (**r**emove) ce fichier de conf :
crontab [-u user] {-l e r}
L'option ''-u'' permet au root d'accéder à celui d'un autre utilisateur.
Quand on édite un fichier de configuration - on utilise donc ''crontab -e'' - on obtient un éditeur de texte fonctionnant comme [[http://fr.wikipedia.org/wiki/Vi_%28logiciel%29|vi]]. En une phrase, cet utilitaire fonctionne ainsi :
* **i** pour rentrer en mode insertion (pour écrire)
* **echap** pour rentrer en mode commande
* echap puis **:wq** pour sauvegarder et quitter
* echap puis **:q!** pour quitter sans sauvegarder
La syntaxe du fichier est la suivante : ''# m h dom mon dow command'' qui signifie respectivement **m**inute, **h**our, **d**ay **o**f **m**onth, **mon**th, **d**ay **o**f **w**eek, et commande (il faut au moins un espace ou une tab entre chaque colonne). Les intervalles sont naturels, sauf pour la colonne **dow** qui va de 0 (dimanche) à 6 (samedi). 7 vaut également dimanche, pour des problèmes de compatibilité.
Il existe des méta-caractères :
* * tous
* / spécifie une répétition
* - définit une plage
* , spécifie plusieurs valeurs
Donc, en résumé :
* on lance la commande ''crontab -e''
* on entre en mode insertion : ''i''
* on modifie le fichier à sa guise (cf exemples plus bas)
* on sauvegarde et on quitte : '' :wq''
On obtient une confirmation de la prise en compte de la modification :
crontab: installing new crontab
Voici des exemples (toujours 1 ligne par commande).
* Lancer script.sh tous les jours à 2h :
0 2 * * * ./script.sh
* Lancer mrtg avec un paramètre toutes les 5 min :
*/5 * * * * mrtg /var/www/mrtg/mrtg.cfg
* lancer script.sh du lundi au vendredi à 23h :
0 23 * * 1-5
* lancer script.sh les 1 et 15 du mois à 23h :
0 23 1,15 * *
Il existe des chaînes de caractères spéciales :
* ''@reboot'' : exécution une fois au démarrage
* ''@yearly'' : exécution une fois par an, "0 0 1 1 *"
* ''@annually'' : exécution une fois par an, "0 0 1 1 *"
* ''@monthly'' : exécution une fois par mois, "0 0 1 * *"
* ''@weekly'' : exécution une fois par semaine, "0 0 * * 0"
* ''@daily'' : exécution une fois par jour, "0 0 * * *"
* ''@midnight'' : execution une fois par jour, "0 0 * * *"
* ''@hourly'' : execution une fois par heure, "0 * * * *"
Le root peut (et doit même) utiliser le répertoire ''/etc/cron.*'' afin de centraliser toutes les commandes en crontab (sinon disséminées dans des fichiers obscurs). La syntaxe est la même qu'une crontab éditée avec ''crontab -e'', à ceci près qu'on ajoute un champ //user// avant la commande, pour préciser l'identité sous laquelle sera lancée la commande ; par exemple pour lancer sous l'identité de "dude" :
*/10 * * * * dude echo "pwet"
=====Tips=====
====Utilisation du "%"====
Lorsqu'on utilise une commande contenant des ''%'' dans une crontab, comme la commande ''date'' par exemple :
01 00 * * * root echo "Bonjour, nous sommes le `date +%Y-%m-%d`" >> /root/horloge_parlante.log
... elle génère inévitablement un message d'erreur du style :
> /bin/sh: -c: ligne 0: caractère de fin de fichier (EOF) prématuré lors de la recherche du « ` » correspondant
Le problème vient du fait que le caractère ''%'' est interprété par cron comme un saut de ligne. Pour utiliser ce caractère dans une crontab, il faut le protéger en le précédant d'un ''\'' :
01 00 * * * root echo "Bonjour, nous sommes le `date +\%Y-\%m-\%d`" >> /root/horloge_parlante.log