{{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