如何监督并自动重启一个进程?

opc*_*0de 34 services

我想要一个进程,如果它崩溃,它将重新启动。我用谷歌搜索了一下,发现一个简单的解决方案是使用daemontools

我不明白如何配置它。

  1. 实现这种功能的最简单方法是什么?
  2. 如何配置它?

ger*_*ijk 30

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

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

如果没有有关您尝试使用它管理的过程的更多详细信息,则很难说配置应该是什么样子。例如,这取决于它是否分叉并将自己置于后台。respawn节的 Upstart 文档应该为您提供更多信息。

不幸的是,目前还无法正确运行用户作业:无法让暴发户运行用户作业

例子

假设我们要保持计算器应用程序运行,即使它被火烧死(信号 9)。

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

    #!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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 通过运行启动它

    sudo start calculator
    
    Run Code Online (Sandbox Code Playgroud)
  3. 它会在您当前的显示器 ( :0)上打开,并在关闭后看到它重新启动,从而享受美妙的体验。

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


n s*_*n s 14

一个非常简单的工具,不需要配置就可以达到同样的效果immortalhttps : //immortal.run/

只需像这样执行命令:

immortal <cmd>

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

  • immortalctl:查看正在运行的作业的状态。name此处将打印一列,您可以使用它来引用具有其他控制命令的作业。
  • immortalctl stop <name>: 停止监视给定名称的作业(不会自动重启,但当前进程会继续执行)
  • immortalctl -k <name>: 发送 SIGKILL 到当前进程。
  • immortalctl exit <name>:停止监视具有给定名称的作业并将其从作业列表中删除。

  • 事实上,这看起来比 upstart/respawn 更轻量级。 (2认同)