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

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

我不明白如何配置它。

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

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

看来你正在寻找已经在Ubuntu中使用Upstart提供的function。 配置中的respawn节将完全按照您的需要进行操作。 我建议不要使用不太标准的方法来处理这个问题。

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

不幸的是,还不能正确运行用户工作: 无法让新手开始运行用户工作

让我们假设我们想要让Calculator应用程序运行,即使它被火烧死(信号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 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计划的计划,这将更加优雅。

一个非常简单的工具可以实现相同的效果而无需配置是immortal : https : //immortal.run/

只需执行如下命令:

immortal

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

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

没有“Upstart”就有办法。 关键字是“inittab”:-)。 虽然这是一个通常不会默认更改的文件,但它可用于在SYSV机器上实现所需的重新生成。

ps-watcher是一种工具,可以监视正在运行的进程并在定义的环境中执行操作。 我们安装它:

 apt-get install ps-watcher 

有关详细信息,请参阅运行HHVM的底部并回退到PHP-FPM – 这对我来说效果很好。

由于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的旧方法。