mai 20
Problème de tâche planifiée : méfiez-vous de run-parts
J’ai créé, il y a quelques temps, un petit script répondant au doux nom de « bonne_bouffe.sh » (m’avertissant par mail lorsqu’il y a de la pizza succulente à la brasserie du coin
) que je voulais exécuter une fois par semaine ; j’ai donc créé une tâche planifiée (un « cron job ») en créant un lien symbolique vers mon script dans le répertoire « /etc/cron.weekly », jusque là tout va bien sauf qu’au bout de quelques semaines je n’avais toujours rien reçu !
Aujourd’hui, je décide donc d’aller jeter un œil dans les logs sans y trouver de traces d’exécution de mon script alors que ses petits copains dans le répertoire étaient eux, bien exécutés !
Que diable se passe t-il ? Pour le savoir, il faut chercher la manière dont sont lancées ces tâches planifiées. Un petit tour dans le fichier « /etc/crontab » nous montre ceci :
# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
Nous voyons donc que les tâches sont exécutées grâce à la commande « run-parts ». Intéressons-nous au manuel de cette commande : « man run-parts ».
run-parts exécute tous les fichiers exécutables situés dans répertoire, et dont le nom satisfait les contraintes décrites ci-dessous. Les autres fichiers sont ignorés.
Si ni l’option –lsbsysinit ni l’option –regex n’est pas utilisée, alors les noms ne doivent être constitués que de lettres minuscules ou majuscules, de chiffres, de tirets de soulignement (« underscore ») ou de tirets.
Le problème apparaît alors clairement : notre lien symbolique, reprenant le nom du script, contient un point et n’est donc pas exécuté !
Deux solutions s’offrent alors à nous pour résoudre ce problème :
- ajouter l’option « –lsbsysinit » à « run-parts » pour les 4 lignes présentes dans « /etc/crontab »
- renommer le lien symbolique « bonne_bouffe.sh » en « bonne_bouffe »
Personnellement, j’ai choisi la seconde solution afin de coller à la façon de faire de Debian
À lire :

Le 20 mai 2008 à 22:17
Un ptit article sur le daemon cron:
http://www.unixgarden.com/index.php/comprendre/a-quoi-ca-sert-un-cronjob