Upstart - 进程被终止时处理停止

Upstart - 进程被终止时处理停止

我的 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

除以下情况外,该服务运行良好:

  1. 进程被外部终止,即:killall java
  2. 尝试停止服务:sudo service myjar stop<---挂起......

该进程处于以下状态:

myjar start/killed, process 123

也无法重新启动...

任何帮助,将不胜感激。

答案1

根据 upstart 手册期望分叉

   Upstart will expect the process executed to call fork(2) exactly once.

并根据评论 5init:当父进程收获子进程时,作业卡在 expect fork/daemon 中漏洞:

当您将“expect fork”或“expect daemon”与“script”结合使用时,Upstart 最终会跟随第一个生成的子进程,其退出状态由 shell 获取。

在你的情况下,upstart可能遵循chdirpid。

您的upstart脚本似乎是一项任务作业,因为既没有命令分叉,chdir也没有java命令分叉,因此删除它expect fork应该可以解决问题。

相关内容