Wie erkennt man, ob eine längere Befehlskette in Cron fehlschlägt?

Wie erkennt man, ob eine längere Befehlskette in Cron fehlschlägt?

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 pipefailfü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

verwandte Informationen