Seite 1 von 1
Beendigungsfehler eines Skripts dokumentieren
Verfasst: Freitag 7. Dezember 2018, 17:33
von maksimilian
Hallo Ihr,
wie kann ich einen (Programmier)Fehler, welcher zum Abbruch eines als cron-Job laufenden Skripts führt, in eine Datei schreiben ? Wie muss da der Aufruf des Skripts lauten ?
maksimilian
Re: Beendigungsfehler eines Skripts dokumentieren
Verfasst: Freitag 7. Dezember 2018, 21:59
von noisefloor
Hallo,
da du cron benutzt, gehe ich davon aus, dass du Linux im Einsatz hast? Dann müsstest du stderr in eine Datei umleiten. Dazu gibt es bergeweise Beispiele im Netz.
Oder du startest das Skript über eine systemd Timer Unit, dann sollte die Fehlermeldung des Skripts automatisch im Journal von journald landen, welches du über journalctl auslesen kannst.
Gruß, noisefloor
Re: Beendigungsfehler eines Skripts dokumentieren
Verfasst: Samstag 8. Dezember 2018, 16:15
von maksimilian
Danke, noisefloor. Ich verbinde als newbi Python immer mit raspbian, sorry. Ja, ich dachte mir bereits, dass die Umlenkung von stderr in eine Datei eine der Lösungen sein würde.
maksimilian
Re: Beendigungsfehler eines Skripts dokumentieren
Verfasst: Sonntag 9. Dezember 2018, 19:40
von maksimilian
Die Anschlussfrage ist vielleicht etwas anspruchsvoller.
Wie kann ich erreichen, dass
1. an die in der Umleitung von stderr angegebene Datei angefügt wird ?
2. in der Datei für jeden Eintrag ein Datum hinzugefügt wird ?
maksimilian
Re: Beendigungsfehler eines Skripts dokumentieren
Verfasst: Sonntag 9. Dezember 2018, 19:46
von noisefloor
Hallo,
zu 1.: siehe hier
https://wiki.ubuntuusers.de/Shell/Umleitungen/
zu 2: mit Umleitungen AFAIK gar nicht. ABER wenn du das Skript über systemd startest, landet die Fehlermeldung im Journal von systemd und da sind immer Zeitstempel dabei.
Gruß, noisefloor
Re: Beendigungsfehler eines Skripts dokumentieren
Verfasst: Sonntag 9. Dezember 2018, 19:50
von __deets__
Wenn du so etwas willst, dann benutz das logging-Modul, fang die Fehlermeldung selbst ab, und gib sie damit aus. Da kannst du zB auch gleich einen Syslog-Handler verwenden, womit stderr frei bleibt.
Re: Beendigungsfehler eines Skripts dokumentieren
Verfasst: Sonntag 9. Dezember 2018, 20:39
von maksimilian
Ah, jetzt lerne ich wieder etwas und entdecke, dass der Start eines cron-Jobs in der Datei /var/log/syslog eingetragen wird. Kann das verhindert werden, um die Datei bei kurzem Aufrufintervall des cron-Jobs nicht aufzublähen ?
maksimilain
Re: Beendigungsfehler eines Skripts dokumentieren
Verfasst: Sonntag 9. Dezember 2018, 21:24
von noisefloor
Hallo,
warum? Ist deine Festplatte zu klein oder voll? Abgesehen davon unterliegt die Datei der Log-Rotation des Systems, d.h. Logs werden automatisch archiviert, rotiert und gelöscht.
Gruß, noisefloor
Re: Beendigungsfehler eines Skripts dokumentieren
Verfasst: Sonntag 9. Dezember 2018, 22:03
von __blackjack__
Die Festplatte beim Raspi ist ja üblicherweise eine SD-Karte. Wobei ich da auch erst einmal schauen würde ob das Log überhaupt dauerhaft gespeichert wird.
Re: Beendigungsfehler eines Skripts dokumentieren
Verfasst: Sonntag 9. Dezember 2018, 22:27
von nezzcarth
noisefloor hat geschrieben: Sonntag 9. Dezember 2018, 19:46
zu 2: mit Umleitungen AFAIK gar nicht. ABER wenn du das Skript über systemd startest, landet die Fehlermeldung im Journal von systemd und da sind immer Zeitstempel dabei.
Das geht zum Beispiel, in dem man die Dateideskriptoren vertauscht und dann nach z.B. awk piped und damit die timestamps davor schreibt. Das ist aber ziemliches Gebastel und nicht empfehlenswert. Daher würde ich mich __deets__ Vorschlag anschließen.
Re: Beendigungsfehler eines Skripts dokumentieren
Verfasst: Montag 10. Dezember 2018, 12:21
von maksimilian
@ deets
Wie kann ich einen Programmierfehler abfangen ? Ich ersetze im laufenden Betrieb (allerdings noch in der Testphase) Skripte, weil ich mir den "offline"-Test sparen möchte.
Danke auch an die anderen Beiträge. Vielleicht kann man das Intervall der Log-Rotation beeinflusen.
maksimilian
Re: Beendigungsfehler eines Skripts dokumentieren
Verfasst: Montag 10. Dezember 2018, 12:47
von __blackjack__
@maksimilian: Wenn der Programmierfehler nicht zu einer Ausnahme führt, dann kannst Du den gar nicht abfangen. Wenn man das könnte, wäre es ja möglich grundsätzlich alle Fehler zu finden und damit 100% fehlerfreie Software zu schreiben, egal wie gross das Projekt wäre.

Re: Beendigungsfehler eines Skripts dokumentieren
Verfasst: Montag 10. Dezember 2018, 13:01
von __deets__
maksimilian hat geschrieben: Montag 10. Dezember 2018, 12:21
@ deets
Wie kann ich einen Programmierfehler abfangen ? Ich ersetze im laufenden Betrieb (allerdings noch in der Testphase) Skripte, weil ich mir den "offline"-Test sparen möchte.
Ich bin mir nicht so sicher, was du da machst - klingt falsch. Aber wie dem auch sei: wenn du deine Skripte sauber strukturierst, dann kannst du auf oberster Ebene sowas machen:
Code: Alles auswählen
def main():
.... # setup logging
try:
rufe_die_eigentliche_funktionalitaet()
except: # hier eine der ausnahmen, in denen ein nacktes except erlaubt ist
logging.exception("fehler") # stacktrace wird automatisch angefuegt
Re: Beendigungsfehler eines Skripts dokumentieren
Verfasst: Dienstag 11. Dezember 2018, 13:05
von maksimilian
Danke für Eure Bemühungen. Ich muss selbst mehr in Python einsteigen und evtl. später zu meiner Frage zurückkehren.
maksimilian