【问题标题】:UpStart initctl start|restart ubuntuUpStart initctl start|restart ubuntu
【发布时间】:2012-03-17 18:58:35
【问题描述】:

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

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

我可以编写脚本来做

initctl start JOB
initctl restart JOB

但这似乎不是最好的做法。

【问题讨论】:

    标签: upstart


    【解决方案1】:

    我遇到了同样的问题。 缺少内置 initctl 的直接“lazy-stop-then-start”命令,我们必须编写脚本。

    如果失败则调用 start 并重新启动:

    initctl start JOB || initctl restart JOB
    

    这个脚本可能不是我们俩都在寻找的答案,但它足够短,可以提及。

    只要服务运行良好,它就可以解决问题。

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

    肯定在寻找对此的改进。

    我希望这会有所帮助。

    【讨论】:

    • 谢谢。我知道。奇怪的是 initctl 不支持它。作业已确定。
    【解决方案2】:

    我也尝试了 hmalphettes 建议的“启动或重启”方法,但遇到了麻烦。使用这种方法时,不会应用对 upstart 脚本的更新。相反,我使用它,它可以按我的预期工作:

    sudo stop JOB || true && sudo start JOB
    

    这基本上读作“如果作业正在运行,请停止作业,然后启动它。”

    【讨论】:

      【解决方案3】:
      sudo service JOB restart
      

      在 Ubuntu 中对 service 命令进行了修补,使其在 Upstart 上的工作方式与在 sysvinit 上最常见的情况下相同。

      systemctl restart JOB
      

      有一些意想不到的效果,一般在使用前应仔细研究。它大部分都在那里,因此您可以在不重新加载作业定义的情况下重新启动作业,这种情况非常罕见。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-04
        • 1970-01-01
        • 2013-07-26
        • 2023-03-10
        • 2019-06-01
        • 1970-01-01
        • 2017-02-06
        相关资源
        最近更新 更多