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

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

我想要一个进程,如果崩溃了,它会重新启动。我在 Google 上搜索了一下,发现一个简单的解决方案是使用守护进程工具

我不明白如何配置它。

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

答案1

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

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

如果没有关于您尝试使用它来管理的进程的更多详细信息,很难说配置应该是什么样子。例如,这取决于它是否分叉并将自身置于后台。Upstart 文档中关于该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
    
  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 计划具有适当的用户作业支持,那么这将更加优雅。

答案2

一个无需配置就能达到相同效果的极其简单的工具是immortalhttps://immortal.run/

只需执行如下命令:

immortal <cmd>

它将在后台运行,如果退出则自动重新启动。

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

答案3

从 Ubuntu 15.04 开始,启动和重生过程由“systemd”管理,可以在这里找到很好的介绍

https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal

可从以下网址获取入门示例

https://www.devdungeon.com/content/creating-systemd-service-files

这种方法取代了基于 /etc/inittab 和 upstart 的旧方法。

答案4

有一种方法可以不使用“Upstart”。关键字是“inittab” :-)。尽管该文件通常不会从默认文件进行更改,但它可用于在 SYSV 机器上实现所需的重生。

相关内容