Monit不会使用kill命令停止脚本

时间:2012-09-17 14:27:21

标签: passenger monit

我使用monit来监控多个进程。这些过程包括乘客实例和我写的守护进程,为乘客实例生成pidfiles。 Monit将启动这些过程没有问题。它不会阻止他们。以下是守护程序的Monit配置:

check process passenger_monitor with pidfile <%= passenger_monitor_pid %>
   group <%= application %>
   start program = "/bin/su - rails_apps -c 'source /home/rails_apps/.rvm/scripts/rvm; /home/rails_apps/passenger_monitor.rb'"
   stop program = "/bin/kill `/bin/cat <%= passenger_monitor_pid %>`"

这是一个通过capistrano生成的erb模板。如果我通过终端以最小的环境以root身份运行stop命令,那么它可以工作,但是当我请求Monit停止进程时,我得到以下错误:

[ADT Sep 17 10:38:31] error    : 'passenger_monitor' failed to stop

我已经尝试了所有我能想到的东西。我无法找到或生成stop命令输出的任何日志。

1 个答案:

答案 0 :(得分:19)

尝试使用

停止服务时遇到同样的问题
stop program = "/bin/kill `/bin/cat /var/run/pusher.pid`"

您可以打开-Iv标志以查看调试输出:

monit -Iv

或者你可以在monit在后台运行时手动验证:

monit validate

他们都显示

'api-pusher-service' stop: /bin/kill
kill: can't find process "`/bin/cat"
kill: can't find process "/var/run/pusher.pid`"

这解决了我的问题

stop program = "/bin/bash -c '/bin/kill `/bin/cat /var/run/pusher.pid`'"