cron 内の長いコマンド チェーンが失敗したかどうかを検出するにはどうすればよいでしょうか?

cron 内の長いコマンド チェーンが失敗したかどうかを検出するにはどうすればよいでしょうか?

crontab エントリが失敗した場合にログを記録する crontab ラッパーを Python で作成したいと思います。次のように使用できるはずです。

0 * * * * cronwrapper -c "some_command | some_other_command & third_command 2>/dev/null && fourth_command"

ログ記録部分は非常に簡単で、すでに完了しています。ただし、パイプ内のいずれかのコマンド、論理積、またはフォークが失敗したかどうかを確実に検出する方法がわかりません。

答え1

いいえ、上記の例にあるすべてのコマンドの終了コードを確実に検出する方法はありません。

4 つのコマンドすべてを小さな bash スクリプト内に追加して使用できないのはなぜですか:

0 * * * * cronwrapper -c "script.sh"

こうすることで、スクリプト内のエラーをより適切に処理できるようになります。

bashを有効にすることもお勧めしpipefailますsome_command | some_other_command

同じパイプラインの終了コードの違いを以下で確認してください。

$ 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

関連情報