Ubuntu upstart:为什么重新启动与停止执行相同的操作?

Ubuntu upstart:为什么重新启动与停止执行相同的操作?

这是我的 upstart 文件/etc/init/myapp.conf

description "Example of starting Node with Upstart and Forever"

start on filesystem or runlevel [2345]
stop on runlevel [06]

expect fork

console output

setuid lwood

env HOME=/home/lwood
env LOG="/home/lwood/myapp/applog.log"    

script
  cd $HOME
  exec forever -a -l $LOG \
       start /home/lwood/myapp/app.js
end script

pre-stop script
  cd $HOME
  exec forever stop /home/lwood/myapp/app.js >> $LOG
end script

你知道为什么sudo restart myapp只停止服务吗?停止后不会启动服务。所以它的效果和 一样sudo stop myapp

执行sudo stop myapp然后就sudo start myapp可以正常工作了。想知道为什么重新启动的行为会有所不同。

我在使用 Ubuntu 12.04。

答案1

有一个新贵中的错误。它仍然存在于 Ubuntu Raring 13.04 中,但我还没有测试过 Saucy 或更高版本。

基本上,pre-stop应该避免。它会导致重启时状态发生未定义的改变。如果您使用它来触发守护进程的关闭(如您的情况一样),它将停止一切。在更传统的用法中,即使指定脚本pre-stop也会阻止您的主进程重启(如错误报告中所示)。

“停止时”作业的行为似乎不受影响,因此一种解决方案是创建一个myapp-stop.conf在“停止 myapp 时”触发的作业。唯一明显的缺点是更难知道所有其他潜在的“停止 myapp 时”作业何时完成。

答案2

为了扩展 xdissent 的答案(对我有用),这里有一个可以放入的示例脚本/etc/init/tomcat-stop.conf。当tomcat服务停止时,此脚本将运行并在 Upstart 重新启动 Tomcat 之前干净地关闭它。

description "Tomcat Server shutdown script"

setuid tomcat_user
setgid tomcat_group

chdir /usr/local/tomcat

start on stopping tomcat

kill timeout 30
script
    exec bin/catalina.sh stop
end script

相关内容