Я хочу создать обертку crontab в python, которая регистрирует, если запись crontab не удалась. Она должна быть применима следующим образом:
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