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