web-dev-qa-db-fra.com

Pourquoi mon travail cron.d par minute ne s'exécute-t-il pas?

J'ai jeté un tas de fléchettes en essayant de faire exécuter un script en python à chaque minute. J'ai donc pensé simplifier le processus pour qu'il ne fasse que "la chose la plus simple qui puisse fonctionner" une fois par minute (je suis sous debian/testing).

J'ai créé un fichier d'une seule ligne dans /etc/cron.d/perminute:

* * * * * /bin/touch /home/me/Ding_dong

Il est la propriété de root et de l'exécutable (je ne sais pas si cela importe). Et puis j'ai fait:

Sudo service cron reload

Et asseyez-vous et commencez à exécuter ls -ltr encore et encore dans mon répertoire personnel (/home/me). Mais mon fichier Ding_dong ne se présente jamais. Je sais que si je fais un Sudo /bin/touch /home/me/Ding_dong, il apparaît immédiatement.

Manque évidemment quelque chose de stupide ici.

33
Travis Griggs

Lorsque vous ajoutez une configuration cron dans /etc/cron.d/ ou dans /etc/crontab, vous devez ajouter le nom d'utilisateur dans quel contexte la commande doit être exécutée, dans votre exemple.

* * * * * root /bin/touch /home/me/Ding_dong

Et juste un conseil de ma part: vous n'avez pas à commencer à exécuter ls -ltr encore et encore, utilisez simplement watch -n 5 "ls -ltr" et la commande sera exécutée toutes les 5 secondes (ou toute autre valeur en remplaçant 5 par ce que vous voulez).

43
noggerl

Pour créer un nouveau travail cron, vous devez exécuter crontab -e en tant qu'utilisateur auquel vous souhaitez exécuter le travail. Ajoutez ensuite la ligne appropriée dans la fenêtre de l'éditeur qui apparaît:

* * * * * /bin/touch /home/me/Ding_dong

La façon dont vous le faites nécessite un format différent et n’est vraiment pas une bonne idée de toute façon. Les crontabs dans /etc/cron.d ont un format légèrement différent, ils nécessitent un nom d'utilisateur pour s'exécuter. Par exemple:

* * * * * USERNAME /bin/touch /home/me/Ding_dong

Une bonne astuce (suggérée par @VogonPoetLaureate) consiste à capturer l'erreur standard de vos tâches cron, ce qui peut aider à les déboguer. Par exemple:

* * * * * /bin/touch /home/me/Ding_dong 2>/tmp/error
3
terdon

Une erreur possible ici est comment un fichier simple ligne est créé. De Documentation Ubuntu :

... line comporte cinq champs heure et date, suivis d'une commande, suivis d'un caractère de nouvelle ligne .

Par exemple, cette façon de créer ne fonctionne pas:

printf "* * * * * /bin/touch /home/me/Ding_dong" > /etc/cron.d/Ding_dong
2
okoloBasii