在 ubuntu 上使用 upstart 时,如果未运行,如何发出启动作业的命令,如果已经运行,如何重新启动。将应用程序部署到新节点时,未定义作业。
initctl restart JOB complains if not already running
initctl start JOB complains if already running.
我可以编写脚本来做
initctl start JOB
initctl restart JOB
但这似乎不是最好的做法。
在 ubuntu 上使用 upstart 时,如果未运行,如何发出启动作业的命令,如果已经运行,如何重新启动。将应用程序部署到新节点时,未定义作业。
initctl restart JOB complains if not already running
initctl start JOB complains if already running.
我可以编写脚本来做
initctl start JOB
initctl restart JOB
但这似乎不是最好的做法。
我遇到了同样的问题。缺少内置 initctl 的直接“lazy-stop-then-start”命令,我们必须编写脚本。
如果失败则调用 start 并重新启动:
initctl start JOB || initctl restart JOB
这个脚本可能不是我们俩都在寻找的答案,但它足够短,可以提一下。
只要服务运行良好,它就可以解决问题。
当服务失败时,此脚本失败两次;例如,如果服务被停止并且实际上无法启动,它也将无法重新启动。
肯定在寻找对此的改进。
我希望这有帮助。
我还尝试了 hmalphettes 建议的“启动或重启”方法,但遇到了麻烦。使用这种方法时,不会应用对 upstart 脚本的更新。相反,我使用它,它可以按我的预期工作:
sudo stop JOB || true && sudo start JOB
这基本上读作“如果作业正在运行,请停止作业,然后启动它。”
sudo service JOB restart
service 命令在 Ubuntu 中进行了修补,使其在 Upstart 上的工作方式与在 sysvinit 上最常见的情况下相同。
systemctl restart JOB
有一些意想不到的效果,一般在使用前应仔细研究。它大部分都在那里,因此您可以在不重新加载作业定义的情况下重新启动作业,这是一种非常罕见的情况。