当前位置: 首页>>技术问答>>正文


如何监督并自动重启流程?

,

问题描述

我希望有一个进程,如果它崩溃将重新启动。我google了一下,发现一个简单的解决方案是使用daemontools

我不明白如何配置它。

  1. 实现这种功能的最简单方法是什么?

  2. 如何配置?

最佳解决方案

此答案适用于具有Upstart的Ubuntu版本(< = 14.10)。对Systemd版本使用另一种方法(> = 15.04)。

看来你正在寻找已经在Ubuntu中使用Upstart提供的功能。配置中的respawn节将完全满足您的需求。我建议不要使用不太标准的方法来处理这个问题。

如果没有关于您尝试使用它的流程的更多详细信息,很难说配置应该是什么样子。这取决于它是否分叉并将其置于背景中。 respawn节的Upstart文档应该为您提供更多信息。

不幸的是,还不能正确运行用户工作:cannot get upstart to run user job

例子

让我们假设我们想要让Calculator应用程序运行,即使它被火烧死(信号9)。

  1. /etc/init/calculator.conf中创建配置文件(基于this article):

    #!upstart
    description "Calculator"
    
    # Start job via the daemon control script. Replace "gert" with your username.
    exec su -l gert -c 'export DISPLAY=:0; /usr/bin/gnome-calculator'
    
    # Restart the process if it dies with a signal
    # or exit code not given by the 'normal exit' stanza.
    respawn
    
    # Give up if restart occurs 10 times in 90 seconds.
    respawn limit 10 90
    
  2. 通过运行启动它

    sudo start calculator
    
  3. 它会在您当前的显示屏上打开(:0),并在关闭它后重新启动它,享受真棒。

    • 识别进程ID,例如做ps aux | grep calculator

      gert  13695 0.2 0.4 349744 16460 ?   Sl   13:38   0:00 /usr/bin/gnome-calculator
      
    • 用火杀死它。

      sudo kill -9 13695
      
    • 看着它再次出现:

      gert  16059 4.6 0.4 349736 16448 ?   Sl   13:40   0:00 /usr/bin/gnome-calculator
      

请注意,对于具有适当用户作业支持的Ubuntu 13.04计划的计划,这将更加优雅。

次佳解决方案

无需配置即可实现相同效果的极其简单的工具是immortalhttps://immortal.run/

只需执行如下命令:

immortal <cmd>

它将在后台运行并在退出时自动重新启动。

  • immortalctl:查看正在运行的作业的状态。这里将打印一个name列,您可以使用它来引用其他控制命令的作业。

  • immortalctl stop <name>:停止使用给定名称监视作业(它不会自动重新启动,但当前进程将继续执行)

  • immortalctl -k <name>:将SIGKILL发送到当前进程。

  • immortalctl exit <name>:停止使用给定名称监视作业,并将其从作业列表中删除。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6354.html,未经允许,请勿转载。