Beendigungsfehler eines Skripts dokumentieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

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
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

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
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

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
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

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
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

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.
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

@ 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
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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. ;-)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

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
            
maksimilian
User
Beiträge: 86
Registriert: Freitag 2. November 2018, 20:59

Danke für Eure Bemühungen. Ich muss selbst mehr in Python einsteigen und evtl. später zu meiner Frage zurückkehren.

maksimilian
Antworten