Warum schreibt Python nicht in .txt file sobald ssh verbindung getrennt ist?

Bushmills145  14.06.2023, 09:53

In welchem Zusammenhang stehen cronjob und ssh-Verbindung?

Nils3883 
Fragesteller
 14.06.2023, 10:38

Ich habe im auth.log gesehen, dass sich die sshd session um 4:50 geschlossen wurde. Dannach sind keine Einträge mehr passiert.

Bushmills145  14.06.2023, 10:39

"Die Session"? Welche Session? Ich dachte du führst den Script als cronjob aus.

Nils3883 
Fragesteller
 14.06.2023, 13:10

Genau aber der Cronjob wird nichtmehr richtig ausgeführt sobald ich nicht mehr in der Maschine eingeloggt bin.

Bushmills145  14.06.2023, 13:24

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.

Nils3883 
Fragesteller
 14.06.2023, 14:26

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

Bushmills145  14.06.2023, 14:28

Das ist dein crontab Eintrag, nicht dein Script.

Dir ist deutlich, dass du den nur zwischen bestimmten Zeiten ausführt?

Nils3883 
Fragesteller
 14.06.2023, 15:25

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.

Bushmills145  14.06.2023, 14:33

Schau auch mal in, so vorhanden, die Datei nohup.out rein, vermutlich in /root, ob darin deine fehlenden Logeinträge stehen.

Nils3883 
Fragesteller
 14.06.2023, 15:27

nohup.out ist leer. Dort kommt aber sowieso nur Output von Python rein oder?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.

Woher ich das weiß:Berufserfahrung – LPI zertifiziert
Bushmills145  14.06.2023, 15:33

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.

1
Nils3883 
Fragesteller
 14.06.2023, 15:48

Danke, das hat mein Problem gelöst! Ich hätte über crontab nur das Shellskript aufrufen sollen. Nun funktioniert es Einwandfrei.

1
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

Nils3883 
Fragesteller
 14.06.2023, 10:33

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.

0
Berny96  14.06.2023, 10:38
@Nils3883

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.

0
Nils3883 
Fragesteller
 14.06.2023, 11:02
@Berny96

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?

0