2012-02-28 49 views
12

在ubuntu上使用upstart时,如何在未运行时发出启动作业的命令,如果已经运行则重新启动。将应用程序部署到新节点时,作业未定义。UpStart initctl开始|重新启动ubuntu

initctl restart JOB complains if not already running 
initctl start JOB complains if already running. 

我可以脚本它做

initctl start JOB 
initctl restart JOB 

但它似乎并没有被做的最好的事情。

回答

10

我当时面临同样的问题。 缺少一个直接的“lazy-stop-then-start”命令内置的initctl,我们必须编写脚本。

调用开始,如果失败,请重新启动:

initctl start JOB || initctl restart JOB 

这个剧本可能不是我们俩都在寻找答案,但它是足够短,就别提了。

只要服务能够很好地工作,它就可以做到这一点。

当服务失败时,此脚本失败两次;例如,如果服务已停止并且实际上无法启动,它也将无法重新启动。

绝对寻找对此的改进。

我希望这会有所帮助。

+1

谢谢。我知道。奇怪的是,initctl不支持它。工作已确定。 – Niclas 2012-03-19 19:49:13

5

我也尝试了hmalphettes建议的'启动或重新启动'方法,但遇到了麻烦。当使用这种方法时,升级脚本的更新将不会被应用。相反,我用这个,这工程,我期望:

sudo stop JOB || true && sudo start JOB 

这基本上写着“停止工作,如果它的运行,然后再启动它。”

2
sudo service JOB restart 

服务命令在Ubuntu打补丁,使其工作在相同的暴发户,因为它在sysvinit的最常见的情况一样。

systemctl restart JOB 

有一些意想不到的效果,一般在使用前要仔细研究。它主要是在那里,所以你可以在不重新加载作业定义的情况下重启一个作业,这是一个非常罕见的情况。

相关问题