Ich möchte einen Crontab-Wrapper in Python erstellen, der protokolliert, wenn ein Crontab-Eintrag fehlschlägt. Er sollte wie folgt nutzbar sein:
0 * * * * cronwrapper -c "some_command | some_other_command & third_command 2>/dev/null && fourth_command"
Der Protokollierungsteil ist ziemlich einfach und bereits erledigt. Ich weiß jedoch nicht, wie ich zuverlässig feststellen kann, ob ein Befehl in der Pipe oder im logischen Und oder beim Forking fehlschlägt.
Antwort1
Nein, es gibt keine Möglichkeit, den Exitcode aller Befehle im obigen Beispiel zuverlässig zu erkennen.
Warum können Sie nicht alle 4 Befehle in ein kleines Bash-Skript einfügen und Folgendes verwenden:
0 * * * * cronwrapper -c "script.sh"
Auf diese Weise können Sie Fehler in Ihrem Skript besser beheben
Möglicherweise möchten Sie Bash auch aktivieren pipefail
fürsome_command | some_other_command
Sehen Sie sich unten den Unterschied in den Exit-Codes für dieselbe Pipeline an.
$ set -o | grep pipefail
pipefail off
$ ls bla &> /dev/null | echo aa
aa
$ echo $?
0
$ set -o pipefail
$ set -o | grep pipefail
pipefail on
$ ls bla &> /dev/null | echo aa
aa
$ echo $?
1