chronic
, который является частью moreutils
, является отличным инструментом для выборочного уведомления по электронной почте о задачах cron только при сбоях:
chronic runs a command, and arranges for its standard out and standard
error to only be displayed if the command fails (exits nonzero or
crashes). If the command succeeds, any extraneous output will be
hidden.
Я хотел бы использовать хронический, но с добавлением (всегда) добавления полного stdout и stderr в файл журнала.
Как я могу этого добиться? (перенаправляет / именованные каналы?)
Если вы не запускаете одновременные команды с одним и тем же журналом, вы можете сделать что-нибудь простое, просто запомнив, где находится текущий конец файла журнала, а затем сбросив его с этой точки при ошибке. Вот тест с использованием функций вместо скриптов:
#!/bin/bash
chronicish(){
let len=1+$(stat -c %s log)
if ! "$@" >>log 2>&1
then tail -c +"$len" log
return 1
fi
}
cmd()( echo stdout; echo stderr msg >&2; exit $1; )
chronicish cmd 0
chronicish cmd 1
Тестовая команда - это функция cmd
который принимает число для использования в качестве выхода и записывает некоторый текст в стандартный вывод. Функция chronicish
используется для запуска команды и отслеживания файла журнала в случае сбоя.
Для простоты я объединил stdout и stderr в один журнал, но очевидно, что тот же метод можно применить для двух отдельных файлов журнала.