Я хочу создать оболочку crontab в python, которая регистрирует сбой записи crontab. Его можно использовать так:
0 * * * * cronwrapper -c "some_command | some_other_command & third_command 2>/dev/null && fourth_command"
Часть регистрации довольно проста и уже сделана. Однако я не знаю, как я могу надежно определить, не срабатывает ли какая-либо одна команда в конвейере или логическое И или разветвление.
Нет, надежно определить код выхода всех команд в приведенном выше примере невозможно.
Почему вы не можете добавить все 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