1

daemon我有一个使用命令(RHEL 6.2)守护进程的java进程。我正在使用以下行来启动该过程,并使用以下行来停止它:

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阻塞?

4

1 回答 1

0

这可能会有所帮助:

while true; do
  daemon --name=my-service --running --verbose | grep not
  [ $? -eq 0 ] && exit
  sleep 1
done

描述为 p 代码:forever { 检查是否daemon --name=my-service --running --verbose返回包含单词的东西,not 如果是,exit 否则sleep a second }

于 2012-10-27T17:14:30.277 回答