当监控进程失败时,如何让监控执行多个操作?

当监控进程失败时,如何让监控执行多个操作?

我有一个自定义服务,我想用 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藏着所有的丑陋。

相关内容