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.
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).
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
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