我有一个自定义服务,我想用 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'"
答案1
我将编写一个包含所需事件操作的小型 bash 脚本。从 Monit 调用该脚本。
它更简洁、更模块化,行为也更可预测。同样的想法也适用于 cron 作业。
例如,从Monit 示例页面,您是否更愿意支持这一点:
检查路径为 /var/crash/core 的目录 httpd_core,如果时间戳改变,则执行“/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 [电子邮件保护] [电子邮件保护];fi'”
或这个:
check directory httpd_core with path /var/crash/core if changed
timestamp then exec script.sh
那里script.sh
藏着所有的丑陋。