在停止未知实例的情况下使用upstart


8

我刚刚进入暴发户,所以我写了一个非常基本的脚本,只是要打印到名为:的日志文件vm-service.conf/etc/init

description "Virtual Images"
author      "Me"

start on runlevel [2345]
stop on runlevel [016]
respawn   


script
echo "DEBUG: `set`" >> /tmp/vm-service.log

end script


pre-stop script
    echo "DEBUG: `set`" >> /tmp/vm-service.log
end script

如果我运行sudo start vm-service,它将输出:

vm-service start/running, process 29034

但是,当我运行时sudo stop vm-service,它输出:

stop: Unknown instance

我已尝试运行sudo initctl reload-configuration,但停止时仍然出现错误。

我看了看菜谱,但可能遗漏了一些明显的东西。

Answers:


7

如果主进程(如果指定了脚本或exec节,则运行什么)退出,则Upstart将认为作业已停止。然后,Upstart将运行启动后过程。

因此,正在发生的情况是第一个脚本正在运行并退出,Upstart正在考虑作业已停止,然后第二个脚本正在运行并退出。如果在已经停止的作业上运行stop命令,它将打印您看到的消息。

要解决此问题,请使用预启动节:

pre-start exec foo --bar

post-start exec baz --foo

如果您这样做,Upstart将在预启动节结束后将作业视为已开始,而不是已停止。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.