为什么这个 upstart 脚本没有停止我的进程?

为什么这个 upstart 脚本没有停止我的进程?

我正在尝试编写一个 upstart 脚本,通过 ping 它的 HTTP 接口来检查我的进程是否正在运行。到目前为止,我就是无法让该post-start子句起作用。这是我尝试过的简化版本:

description "my application"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 360 180
setuid myuser
setgid mygroup

chdir /my/directory
exec /bin/sleep 60

post-start script
  sleep 5
  stop
  exit 1
end script

从终端:

/etc/init$ sudo start myapp   # returns after 5 seconds
myapp start/running, process 27477
jrantil@myserver:/etc/init$ ps -ef|grep sleep
107      27477     1  0 16:56 ?        00:00:00 /bin/sleep 60
jrantil  27482 26900  0 16:56 pts/1    00:00:00 grep --color=auto sleep

有人能告诉我为什么我的应用程序 5 秒后没有关闭吗?据我所知,如果我不调用stop它,它就会重新生成。

答案1

你可能想让这成为一个任务脚本,而不是服务脚本。这意味着 Upstart init 守护进程不会期望它继续运行,也不会尝试重新启动它或跟踪 PID。将stopexecpost-start节替换为task指令,保留如下内容:

描述“我的申请”

在运行级别启动 [2345]
任务

设置我的用户
设置我的组

chdir /我的/目录
执行/bin/sleep 5

显然,exec用对你有意义的东西替换该行。也许你想script连续运行几个命令。如果你的进程永远不会自行停止,并且你希望 Upstart 在 5 秒后将其终止,请尝试以下操作:

描述“我的申请”

在运行级别启动 [2345]
请停止杀我

设置我的用户
设置我的组

chdir /我的/目录
执行/bin/sleep 60

启动后脚本
    /bin/sleep 5
    initctl 发出 kill-me-please
结束脚本

相关内容