Windows Task Scheduler - Verhalten bei Script-Error

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
sfx2k
User
Beiträge: 54
Registriert: Dienstag 2. September 2014, 13:29

Hallo zusammen,

ich rufe eine Routine folgendermaßen von der Console auf:

Code: Alles auswählen

python -c "from my_lib import registry as reg; reg.set_registry_value('hkcr', '._aaa', 'Test', 'testtest')"
Es soll im Registry Schlüssel HKEY_CURRENT_USER\._aaa der Wert Test auf testtest gesetzt werden.
Das funktioniert auch soweit.

Nun ändere ich den Schlüssel auf einen nicht existierenden:

Code: Alles auswählen

python -c "from my_lib import registry as reg; reg.set_registry_value('hkcr', '._bbb', 'Test', 'testtest')"
Auf der Console bekomme ich korrekterweise eine Fehlermeldung
FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finden
Ich möchte diesen Aufruf gerne aus dem Windows-Task-Scheduler heraus machen.
Das Problem ist aber, dass dieser mir den Task als erfolgreich abgeschlossen anzeigt.
Ich hätte jetzt erwartet, dass ich die Fehlermeldung auch dort irgendwo einsehen kann.
Woher soll ich denn da wissen, dass etwas schief gelaufen ist?

Funktioniert das damit generell nicht, oder muss ich irgendetwas besonderes machen?
(Von externem logging wurde mir abgeraten, da die meisten Scheduler das von mir gewünschte wohl beherrschen sollen).

Hat jemand eine Idee?
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Bei mir ist der nicht erfolgreich. So wie aus DOS Zeiten liefert ERRORLEVEL bei erfolgreicher Ausführung eine 0, dein Code liefert eine 1.
Vielleicht hilfts das als Batch zu schreiben.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
BlackJack

@sfx2k: Das etwas schief gelaufen ist sollte man am Rückgabecode sehen können der normalerweise 0 ist, bei Ausnahmen aber 1.

Die Ausgabe scheint im Nirwana zu verschwinden. Die muss man wohl selber irgendwo mitprotokollieren wenn man sie aufheben möchte. Wenn es Windows-typisch sein soll, würde ich mal schauen wie man Einträge in das Windows-Ereignisprotokoll bekommt und dann für das Logging-Modul einen entsprechenden Handler schreiben, oder noch besser, erst einmal schauen ob es so etwas schon irgendwo gibt.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

wenn man die Dokumentation zum logging-Modul entsprechend weit liest, kommt irgendwann logging.handlers.NTEventLogHandler.
sfx2k
User
Beiträge: 54
Registriert: Dienstag 2. September 2014, 13:29

darktrym hat geschrieben: Bei mir ist der nicht erfolgreich. So wie aus DOS Zeiten liefert ERRORLEVEL bei erfolgreicher Ausführung eine 0, dein Code liefert eine 1.
Vielleicht hilfts das als Batch zu schreiben.
Das kann bei Dir nicht erfolgreich sein, da es nicht auf die Standard-Lib geht, sondern auf eine von mir geschriebene Routine ;)
Lass Dir aber versichert sein, dass der erste Aufruf erfolgreich ist; der Zweite nicht :)
BlackJack hat geschrieben: Das etwas schief gelaufen ist sollte man am Rückgabecode sehen können der normalerweise 0 ist, bei Ausnahmen aber 1.
Ah jetzt ja. Jetzt sehe ich das auch; ich habe immer nur im Verlauf des Tasks geschaut, wo bei Fehlern, die direkt auftreten (bspw. wenn die Python.exe nicht gefunden worden wäre) eine entsprechende Meldung aufscheint.
In der tabellarischen Ansicht wird allerdings unter Ergebnis der letzten Ausführung besagte 1 bei einem Fehler angezeigt :)
Dennoch fehlt mir der Grund, weswegen ich ja Exceptions abgefangen und extern mitgeloggt hatte. Das wurde mir aber ja nicht empfohlen :(

Also lag ich doch richtig, für Aufrufe, die man nicht selber antriggert um sie zu überwachen, zu loggen?
Ich werde mich mal mit dem Logging-Modul auseinandersetzen.
Sirius3 hat geschrieben: wenn man die Dokumentation zum logging-Modul entsprechend weit liest, kommt irgendwann logging.handlers.NTEventLogHandler.
Da mir vom Abfangen von Exceptions abgeraten wurde, habe ich das bisher nicht getan, werde es aber jetzt nachholen.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Bist Du Dir sicher, dass der Windows task schedular stderr nicht irgendwohin schreibt, bzw. dazu konfiguriert werden kann es zu tun?

Hast Du schon an den im Folgenden beschriebenen Stellen nach log-files geschaut?
http://superuser.com/questions/164896/h ... -task-logs
http://technet.microsoft.com/en-us/libr ... 10%29.aspx
a fool with a tool is still a fool, www.magben.de, YouTube
sfx2k
User
Beiträge: 54
Registriert: Dienstag 2. September 2014, 13:29

MagBen hat geschrieben:Bist Du Dir sicher, dass der Windows task schedular stderr nicht irgendwohin schreibt, bzw. dazu konfiguriert werden kann es zu tun?

Hast Du schon an den im Folgenden beschriebenen Stellen nach log-files geschaut?
http://superuser.com/questions/164896/h ... -task-logs
http://technet.microsoft.com/en-us/libr ... 10%29.aspx
Ja, bin ich. Weder im Eventlog noch in besagter Text-Datei steht etwas drin.
Und beim Task selber sehe ich, wie oben bereits erläutert, auch nichts.
Antworten