我使用daemon
命令(RHEL 6.2)守护进程。我正在使用以下行开始流程,下面的行停止它:
daemon --command "/opt/my-service" --respawn --name=my-service --verbose
daemon --stop --name=my-service --verbose
一切正常,直到我尝试使用停止/启动方法重启我的流程:
daemon --stop --name=my-service --verbose
daemon --command "/opt/my-service" --respawn --name=my-service --verbose
在执行上述命令之前,进程正在运行,然后将停止现有进程,但不会创建新进程。相反,以下行将记录到/var/log/messages
:
Oct 27 07:59:46 myhostname my-service: my-service: fatal: failed to become a daemon: Resource temporarily unavailable
据我所知,这意味着我们试图获取对pid文件的锁定,但另一个进程正在对其进行锁定。或者换句话说:原始流程仍在运行。
有趣的是它无法通过以下命令再现:
daemon --command "sleep 30s" --respawn --name=sleeper --verbose
daemon --stop --name=sleeper --verbose
daemon --command "sleep 30s" --respawn --name=sleeper --verbose
然后我的进程中必定存在导致/利用--stop
的异步性质的东西。
如何阻止--stop
?
答案 0 :(得分:0)
这可能会有所帮助:
while true; do
daemon --name=my-service --running --verbose | grep not
[ $? -eq 0 ] && exit
sleep 1
done
描述为p代码:
永远{
检查daemon --name=my-service --running --verbose
是否返回包含单词not
的内容
如果是,exit
否则sleep a second
}