Crontab führt kein Python-Skript aus, keine Fehler oder gar nichts

2328
kkonrad

Hat bereits über 1 Stunde gebraucht, um diese einfache Sache zu machen, und ist total gescheitert: /

Kann nicht finden, warum dieser Python nicht auf Crontab funktioniert, während er perfekt in der Kommandozeile funktioniert ...

Skript ist (bash):

#!/bin/bash  touch before_zzz_text.txt # to check if cron works at all  ls > "before_zzz_text.txt" # just to check if I'm in the correct directory  /root/anaconda3/bin/python -V > pv.txt # this is empty! or a white char  touch after_zzz_text.txt # this works new file every minute 

So weiß ich, dass es in cron läuft (Dateien .txt, die jede Minute erstellt werden - wie cron jede Minute).

Pv.txt ist jedoch leer ... so dass das bash-Skript nicht funktioniert?

Am Ende möchte ich, dass ein komplizierteres Skript im Bash-Skript ausgeführt wird, aber ich habe versucht herauszufinden, warum es nicht funktioniert. Zur Vereinfachung ist es jetzt "/ root / anaconda3 / bin / python -V '."

1
Ist `/ root / anaconda3 / bin / python` die Python-Skriptdatei? Dies ist verwirrend, da "Python" der Handler ist, den Sie ausführen möchten. Beginnt es mit `#! / Usr / bin / python` oder ähnlich? Haben es und alle seine Verzeichniskomponenten die Berechtigung "Alle ausführen"? Dies ist wichtig, da die Crontab-Umgebung nicht mit der Ihres Terminals übereinstimmt. Wenn die `.txt'-Dateien zuvor gelöscht wurden, mit welchen Berechtigungen und Benutzer- / Gruppennamen wurden sie erstellt? AFH vor 6 Jahren 0
"/ root / anaconda3 / bin / python" ist der Pfad für den Python-Interpreter. Es war vorher nur "Python", aber ich finde zwar nicht den richtigen Pfad oder etw. Mit "python -V> pv.txt" funktioniert es sowieso nicht. Es gibt auch keine Fehlermeldungen, die Datei pv.txt ic ist leer ... Sollte es so sein? "python -V sollte einfach die Python-Version angeben und"> ​​pv.txt "sollte diese Nachricht in dieser Datei speichern, die am Ende leer ist ... kkonrad vor 6 Jahren 0
Entschuldigung, ich war verwirrt, weil `/ root / anaconda3 / bin /` ein unwahrscheinlicher Ort für den Interpreter ist. Eine leere Protokolldatei wird erstellt, wenn der Interpreter aufgrund eines Fehlers nicht ausgeführt werden kann. Fügen Sie am Ende des Python-Aufrufs "2> & 1" hinzu, um Fehler anzuzeigen. AFH vor 6 Jahren 0
Kein Problem hat den Fix endlich bekommen! Scheint, dass der fehlende MTA auf dem Ubuntu-Server herumlief. Nach dem Hinzufügen von "2> & 1" zur Python-Zeile funktioniert es !!!! kkonrad vor 6 Jahren 0
Ich wusste nicht, dass die Version in "stderr" geschrieben wurde: Wie Sie hatte ich angenommen, dass sie auf "stdout" sein würde, aber ich habe es gerade auf meinem eigenen System bestätigt. Ich bin froh, dass Sie im Geschäft sind. Ich denke, ich werde eine Antwort einreichen, zum Nutzen anderer Nutzer der Website. AFH vor 6 Jahren 0
Ich bin immer noch nicht sicher, ob das der Fall ist, aber irgendwie funktioniert es nach dem Hinzufügen des "2> & 1" -Teils. Dies ist eher eine Lösung, wenn MTA nicht installiert ist, denke ich. kkonrad vor 6 Jahren 0
Sie sollten keine Antwort in eine Frage stellen. Wenn Sie der Meinung sind, dass die vorhandene Antwort nicht ausreicht, fügen Sie Ihre eigene Antwort hinzu. Verwenden Sie [diesen Link] (https://superuser.com/revisions/1266128/2), wenn Sie Ihre "Antwort" in eine tatsächliche Antwort einfügen möchten. Kamil Maciorowski vor 6 Jahren 0

1 Antwort auf die Frage

3
AFH

Nach einiger Diskussion (siehe die Kommentare oben) scheint das grundlegende Problem darin zu liegen, dass pythonder Text der Version in stderrden erwarteten geschrieben wird stdout, in den nichts geschrieben wird, daher die leere Datei.

Im Allgemeinen ist es bei der Diagnose von crontabProblemen ratsam, Fehler und Ausgaben in derselben oder in einer anderen Datei zu protokollieren. Durch das Hinzufügen 2>&1am Ende der pythonAufrufzeile erschien der Versionstext in pv.txt:

/root/anaconda3/bin/python -V > pv.txt 2>&1