Warum schreibt Python nicht in .txt file sobald ssh verbindung getrennt ist?
Hallo zusammen
Ich habe ein Python Programm mit Selenium code. Dieses Programm wird durch einen Cronjob für einige stunden in einem regelmässigen 15 minuten rhythmus ausgeführt. Um zu überprüfen, wie das Programm läuft, habe ich mir ein Log-File bereit gelegt. Python schreibt dort bei jedem Durchlauf einen Timestamp, plus alle Variablen die mich interessieren, rein. Nun habe ich heute Nacht gesehen, dass ab einer gewissen Zeit keine Einträge in das Log-File gemacht wurden. In den Cron-Logs habe ich gesehen, dass der Job genau wie erwünscht ausgeführt wurde. Hat jemand eine Idee woran das liegen könnte?
In welchem Zusammenhang stehen cronjob und ssh-Verbindung?
Ich habe im auth.log gesehen, dass sich die sshd session um 4:50 geschlossen wurde. Dannach sind keine Einträge mehr passiert.
"Die Session"? Welche Session? Ich dachte du führst den Script als cronjob aus.
Genau aber der Cronjob wird nichtmehr richtig ausgeführt sobald ich nicht mehr in der Maschine eingeloggt bin.
Dann würde ich in deinem Script mal nachschauen, wodurch diese Abhängigkeit von ssh verursacht wird - denn die sollten nichts miteinander zu tun haben.
Mein Cronjob Skript sieht so aus: */15 22-23,0-7 * * * nohup python3 /path/to/main.py >> /path/to/Log.txt 2>&1 &
So wie es aussieht ist das problem bei Chromedriver...
Das ist dein crontab Eintrag, nicht dein Script.
Dir ist deutlich, dass du den nur zwischen bestimmten Zeiten ausführt?
Das ist mir klar. Im Python Skript bastle ich natürlich nicht mit SSH oder sonstigem herum. Dort befindet sich lediglich der Selenium code. Nur Cronjob und Python sind von mir.
Schau auch mal in, so vorhanden, die Datei nohup.out rein, vermutlich in /root, ob darin deine fehlenden Logeinträge stehen.
nohup.out ist leer. Dort kommt aber sowieso nur Output von Python rein oder?
2 Antworten
Davon ausgehend, dass dein Script nach kurzer Ausführung beendet wird, bevor er nach 15 Minuten erneut kurz gestartet wird, sollte weder nohup noch detach (mit dem & am Ende) erforderlich sein.
Lasse beide weg, und schau, ob du dann konsistente logs bekommst.
So nicht, starte als cronjob lediglich einen shell script, und rufe Python Interpreter sowie Script von dort aus auf, führe auch die Ausgabeumleitung dort aus.
Und, neben dem python log, schreib dann auch noch einen zusätzlichen log der Ausführung vom shell script, oder schreibe den zusätzlich in deinen log.
dass ab einer gewissen Zeit keine Einträge in das Log-File gemacht wurden
Welche Zeit genau?
Ist es vielleicht 00:00 Uhr?
Versuch doch mal dass der Skript in einem ./log/ verzeichnis für jeden Tag ne seperate Datei anlegt.
z.b. ./log/job_14162023.txt
Es ist nicht um Mitternacht passiert sondern um 4:45. Im auth.log file habe ich gesehen, dass meine sshd session um 4:50 beendet wurde (Weil ich meinen Computer nicht ausgeschaltet habe). Dannach wurden keine Einträge mehr gemacht. Es schein so, als würden nur Einträge passieren, wenn ich eingeloggt bin.
AAAH! Natüürlich... die SSH sitzung ist deinem Terminal gebunden und schließt sich auch mit dem Terminal.
Deshalb: Nutze dass nohup -Kommando. Es "ignoriert das Abhängen" (hangup), was bedeutet, dass der Prozess nicht beendet wird, wenn die Sitzung beendet wird. Ein typischer Befehl sieht so aus:
nohup python script.py &
Beachte dass die Ausgabe des Skripts standardmäßig in eine Datei namens "nohup.out" umgeleitet wird, sofern nicht anders angegeben.
Vielen Dank, das bringt mich einen schritt weiter. Doch es löst das Problem noch nicht ganz. Was mir auch aufgefallen ist: Im Syslog wird nach 4:50 (das für Selenium essentielle Chromium) nicht mehr gestartet. Dafür erhalte ich folgende Fehlermeldung: CRON[10932]: (CRON) info (No MTA installed, discarding output) aber ein Mail Transfer Agent muss nicht zwingend eingerichtet sein oder?
Danke, das hat mein Problem gelöst! Ich hätte über crontab nur das Shellskript aufrufen sollen. Nun funktioniert es Einwandfrei.