如果进程终止,我该如何在 upstart、runit、supervisor、daemontools 等之间进行选择以重新启动它?(流程监督/监控)

如果进程终止,我该如何在 upstart、runit、supervisor、daemontools 等之间进行选择以重新启动它?(流程监督/监控)

我有一个 Nginx Web 代理、gunicorn Web 服务器和一个 python/flask Web 应用程序。Gunicorn 进程似乎已死,我希望将来能通过研究一个实用程序来改善这种情况,该实用程序可以监控 gunicorn 进程并在其再次崩溃时重新启动它。

我发现了几种可以完成这项工作的流程监督实用程序:

  • 守护进程工具
  • 启动
  • 运行
  • s6
  • 导师
  • 系统D
  • 暴发户
  • ...

是否有一篇综合性的文章来比较和对比用于监视和重新启动进程的各种实用程序?

https://en.wikipedia.org/wiki/Process_supervision

答案1

  • runit是 的继承者daemontools(两者都写于c

  • supervisord用途python

我一直runit在使用socklog同一作者的Alpine Linux lxc大约 10 个月来一直在使用容器来管理web/database和各种其他服务。它很轻便,易于管理,而且我没有遇到过任何服务故障。日志守护程序也可以以自己的用户身份运行,root这很好。

空虚linux用作runit系统init并用于服务监管(在包树中搜索run文件以获取脚本示例runit)。

答案2

如果您的发行版使用 Upstart,请使用它。它对作业重启提供了非常基本的支持,但包括可能阻止重启循环的限制,如 @EEAA 所述。

如果您的操作系统使用另一个 init 程序,请不要更改它。我无法真正帮助您使用您提到的其他工具,因为我通常使用 Upstart 仍然存在的 Ubuntu(截至最新的 LTS),所以我很少使用它们。但创建一个从运行的简单脚本并不困难计划任务每分钟一次(或更频繁地循环),可以检查 PID 是否存在,并在失败时发出重新启动。

相关内容