我最初在StackOverflow上问过这个问题。然后意识到这可能是一个更好的地方。
我有bluepill设置来监视我的delay_job进程。(Ruby On Rails应用程序)
使用Ubuntu 12.10。
我正在使用Ubuntu的启动和监视bluepill服务本身upstart
。我的新贵配置位于(/etc/init/bluepill.conf
)以下。
description "Start up the bluepill service"
start on runlevel [2]
stop on runlevel [016]
expect daemon
exec sudo /home/deploy/.rvm/wrappers/<app_name>/bluepill load /home/deploy/websites/<app_name>/current/config/server/staging/delayed_job.bluepill
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
我也尝试使用expect fork
代替expect daemon
。我也尝试过expect...
完全删除该行。
机器启动时,bluepill可以正常启动。
$ ps aux | grep blue
root 1154 0.6 0.8 206416 17372 ? Sl 21:19 0:00 bluepilld: <app_name>
此处,bluepill进程的PID为1154。但是upstart
似乎正在跟踪错误的PID。它正在跟踪不存在的PID。
$ initctl status bluepill
bluepill start/running, process 990
我认为它正在跟踪sudo
启动bluepill进程的进程的PID 。
如果我使用强制杀死bluepill,这可以防止重新生成bluepill进程kill -9
。
而且,我认为由于跟踪了错误的PID,重新启动/关机只是挂起,因此每次都必须硬重置计算机。
这可能是什么问题?
更新:
直到今天(2015年5月3日),问题仍然存在于Ubuntu 14.04.2上。
问题不在于使用sudo。我不再使用sudo了。我更新的新贵配置是这样的:
description "Start up the bluepill service"
start on runlevel [2]
stop on runlevel [016]
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
# Give up if restart occurs 10 times in 90 seconds.
respawn limit 10 90
expect daemon
script
shared_path=/home/deploy/websites/some_app/shared
bluepill load $shared_path/config/delayed_job.bluepill
end script
机器启动时,程序会正常加载。但是,新贵仍然会跟踪错误的PID,如上所述。
评论中提到的解决方法可能会解决挂起的问题。我还没有尝试过。
ps aux | grep 990
应该这样做,但pstree 990
可能会提供更多信息。