![Upstart - 进程被终止时处理停止](https://linux22.com/image/864252/Upstart%20-%20%E8%BF%9B%E7%A8%8B%E8%A2%AB%E7%BB%88%E6%AD%A2%E6%97%B6%E5%A4%84%E7%90%86%E5%81%9C%E6%AD%A2.png)
我的 java 进程有 upstart 配置:
/etc/init/myjar.conf
description "my jar"
author "me"
start on runlevel [2345]
stop on shutdown
expect fork
script
chdir /opt/myjar/
java -jar myjar.jar >/var/log/myjar/myjar.log 2>&1
end script
post-start script
emit myjar-local_running
end script
除以下情况外,该服务运行良好:
- 进程被外部终止,即:
killall java
- 尝试停止服务:
sudo service myjar stop
<---挂起......
该进程处于以下状态:
myjar start/killed, process 123
也无法重新启动...
任何帮助,将不胜感激。
答案1
根据 upstart 手册期望分叉:
Upstart will expect the process executed to call fork(2) exactly once.
并根据评论 5在init:当父进程收获子进程时,作业卡在 expect fork/daemon 中漏洞:
当您将“expect fork”或“expect daemon”与“script”结合使用时,Upstart 最终会跟随第一个生成的子进程,其退出状态由 shell 获取。
在你的情况下,upstart
可能遵循chdir
pid。
您的upstart
脚本似乎是一项任务作业,因为既没有命令分叉,chdir
也没有java
命令分叉,因此删除它expect fork
应该可以解决问题。