У меня есть специальный сервис, за которым я хочу следить с помощью monit. Когда процесс не удается, я хочу скопировать журнал в общую файловую систему и перезапустить службу. Что-то вроде следующего, но я не уверен, что именно. Любые подсказки будут оценены.
check process pipeline with pidfile /var/run/pipeline.pid
start program = "/sbin/start pipeline"
stop program = "/sbin/stop pipeline"
if 10 restarts within 10 cycles then timeout
# Not sure what to write next
if <service has failed>
restart and
exec "/bin/bash -c 'cp /var/log/upstart/pipeline.log /nfs/logs/`hostname`.`date +'%m-%d-%Y_%H.%M.%S'`.log'"
Я бы написал небольшой сценарий bash, содержащий желаемые действия при событии. Вызовите этот сценарий из Monit.
Он чище, модульнее и ведет себя более предсказуемо. Та же идея применима к заданиям cron.
Например, из Страница примеров Monit, не могли бы вы поддержать это:
проверьте каталог httpd_core по пути / var / crash / core, если временная метка изменилась, затем exec "/ bin / bash -c 'if [
/bin/cat /tmp/monit_httpd_core.tmp | head -1
знак равно/bin/ls /var/crash/core/core.httpd* | tail -1
]; затем / usr / bin / gdb -x /etc/gdb.batch / usr / sbin / httpd/bin/ls /var/crash/core/core.httpd* | tail -1 | tee /tmp/monit_httpd_core.tmp
| mail -s httpd_crash admin@foo.bar webmaster@foo.bar; fi '"
или это:
check directory httpd_core with path /var/crash/core if changed
timestamp then exec script.sh
куда script.sh
содержит все уродство.