我的 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
应该可以解决问题。