/ / Sinon, comment puis-je résoudre ce travail cron? - python, cron, freebsd

Sinon, comment puis-je résoudre ce travail cron? - python, cron, freebsd

Je travaille (et cherche) à obtenir cecitravail cron / script python en cours d'exécution depuis un certain temps. Cependant, cela ne fonctionne évidemment pas. Je ne suis pas sûr de savoir comment résoudre autrement pourquoi, et j’ai essayé plusieurs choses que j’ai trouvées ici dans d’autres questions SO.

chemin du script: /home/phil/cron_jobs/octoStatus.py

Je voudrais que cron s'exécute chaque minute.

Fichier Crontab.txt:

*/1 * * * * python /home/phil/cron_jobs/octoStatus/octoStatus.py &> octolog.txt

Le fichier octolog.txt devait capturer les informations STDOUT et STDERR. Sortie de "sudo tail / var / log / cron"

Jul  3 10:20:00 bsd /usr/sbin/cron[83876]: (root) CMD (/usr/libexec/atrun)
Jul  3 10:20:00 bsd /usr/sbin/cron[83877]: (phil) CMD (python /home/phil/cron_jobs/octoStatus/octoStatus.py &> octolog.txt)
Jul  3 10:21:00 bsd /usr/sbin/cron[83903]: (phil) CMD (python /home/phil/cron_jobs/octoStatus/octoStatus.py &> octolog.txt)
Jul  3 10:22:00 bsd /usr/sbin/cron[83934]: (phil) CMD (python /home/phil/cron_jobs/octoStatus/octoStatus.py &> octolog.txt)

Il semble fonctionner chaque minute comme vous le souhaitez. Cependant, les résultats attendus du script ne se produisent pas. octolog.txt n'est pas non plus créé. Lorsque j'exécute manuellement l'instruction exacte affichée dans le journal cron, tout fonctionne correctement et le fichier octolog.txt est créé.

J'exécute ceci sur FreeBSD, et j’ai examiné le répertoire / var / log / syslog, mais il n’existe pas. Je suis nouveau sur FreeBSD, mais je ne suis pas sûr que cela veuille dire beaucoup dans cette situation, mais Je pensais que je le mentionnerais.

Je ne suis pas sûr de savoir quelles autres informations seraient utiles, car je suis coincé. Merci. Phil

Réponses:

5 pour la réponse № 1

Tout d’abord, pour exécuter votre script à la minute, vous n’avez pas besoin */1. Cron fonctionne toutes les minutes par défaut, donc:

* * * * * /path/to/command

Ensuite, votre redirection peut être cassée. le bash la page de manuel a &> Le format indiqué dans la section "Réorientation de la sortie standard et de l’erreur standard", je suppose donc que c’est ce que vous essayez de faire. Mais FreeBSD "s /bin/sh n'est pas bash. Alors:

* * * * * /path/to/command >/path/to/output.txt 2>&1

Cela envoie stdout à votre fichier et duplique stderr sur stdout.

Cela nous amène à:

* * * * * python /home/phil/cron_jobs/octoStatus/octoStatus.py > octolog.txt 2>&1

Notez également selon man 5 crontab, vous pouvez définir un MAILTO variable dans votre fichier crontab qui dirigera la sortie / les erreurs de vos travaux vers une adresse e-mail.

Attention, le PATH utilisé par cron peut ne pas inclure /usr/local/bin, où python est installé. Si ton octoStatus.py Le script inclut un "shebang", vous pourrez alors l'exécuter directement. Sinon, vous devrez soit indiquer le chemin complet de votre python soit binaire, soit ajouter une variable PATH à votre crontab (semblable au MAILTO que j'ai mentionné ci-dessus). Dans tous les cas, vous pouvez obtenir des instructions sur le format en lisant man 5 crontab.


2 pour la réponse № 2

Je vous recommanderais d'écrire directement dans un fichier à partir de votre script python avec append mode.

Aussi juste deviner mais je pense que vous devriez donner le chemin absolu au fichier de sortie comme indiqué dans le commentaire quelque chose comme python home/phil/cron_jobs/octoStatus/octoStatus.py &> /home/phil/cron_jobs/octoStatus/octolog.txt