Как определить, что длинная цепочка команд в cron дает сбой?

Как определить, что длинная цепочка команд в cron дает сбой?

Я хочу создать обертку 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

Связанный контент