Python script ne fonctionne pas comme cronjob

J'ai essayé tout et j'ai vu d'autres questions ici à propos de cela, mais je ne peux pas pour la vie de moi exécuter un script python en tant que cronjob.

J'ai essayé ce qui suit.

* * * * * /usr/bin/python /home/myhome/myscript.py 

Tout myscript.py fait un sommeil pendant 30 secondes afin que je puisse vérifier les processus s'il est en cours d'exécution mais je ne l'ai pas encore vu.

 import time time.sleep(30) 

Qu'est-ce qui me manque? Ne devrait-il pas fonctionner? J'ai même essayé d'ouvrir un fichier dans / tmp et de sortir là-bas, mais pas de chance. Je suppose qu'il s'agit d'un problème de variable d'environnement mais je ne sais pas par où commencer.

BTW fonctionne correctement sur la ligne de commande.

Oui, cela devrait fonctionner correctement, en supposant que lorsque vous dites "ça marche bien sur la ligne de commande", vous collez littéralement la même commande à partir de l'entrée crontab. Choses à vérifier:

  1. Le cron daemon fonctionne-t-il réellement? (Exécuter pidof cron )
  2. S'il est en cours d'exécution, essayez de le redémarrer. (Dépend de votre saveur d'Unix, mais quelque chose comme le service cron restart ou /etc/init.d/cron restart )
  3. Si votre script ne fonctionne toujours pas, vérifiez tout dans /var/log pour une sortie appropriée: le fichier spécifique dépend de votre configuration syslog, mais /var/log/messages et /var/log/syslog sont de bonnes options si /var/log/cron n'existe pas.

Remarque: Vous devrez être root pour faire la plupart de ces choses – si vous n'avez pas accès, vous devrez parler à la personne qui administre la machine.

En outre, lorsque vous dites que vous ouvrez un fichier dans /tmp , c'est probablement la chose la plus fiable que vous pouvez faire pour assurer son fonctionnement. Dès le début de votre script (avant importation ou quoi que ce soit), ajoutez ceci:

 with open("/tmp/testfile", "a") as fd: fd.write("I am running\n") 

Vous pouvez également vérifier si votre crontab est correctement installé – il devrait être placé dans quelque chose comme /var/spool/cron/crontabs (c'est-à-dire sur Ubuntu Linux, il peut différer sur différents saveurs Unix). Vous devriez voir un fichier ici avec votre nom d'utilisateur qui devrait contenir votre saisie.

Enfin, si vous êtes vraiment désespéré, vous pourriez strace votre processus de cron pour voir ce qu'il fait:

 sudo strace -f -p `pidof cron` 

Vous ne devez pas trop vous soucier des détails, mais il devrait faire quelque chose à chaque minute. Si ce n'est pas le cas, tout va bien mal.