我如何selectupstart,runit,supervisor,daemontools等重新启动一个进程,如果它死了?

我有一个Nginxnetworking代理,gunicorn web服务器和一个python / flask web应用程序。 Gunicorn进程显然已经死亡,我希望通过研究能够监控并重新启动gunicorn进程的实用程序,以便在未来再次崩溃的时候改进这一进程。

我发现了几个可以完成这项工作的人:

  • 暴发户
  • 运行
  • daemontools的
  • 还有很多

是否有一篇综合性的文章比较了用于监控和重启过程的各种实用程序?

如果你的发行版本使用Upstart,那就去吧。 它对作业重启有非常基本的支持,但包含了可以防止重启循环的限制,如@EEAA所述。

如果您的操作系统使用另一个init程序,请不要更改它。 我不能真正帮助你提到的其他工具,因为我通常使用Ubuntu,Upstart仍然存在(截至最新的LTS),所以我与他们没什么关系。 但是创build一个从cron运行一个简单脚本(或者更频繁地在一个循环中)的简单脚本并不难,它可以检查一个PID是否存在,并在发生故障时发出重新启动。

  • runitrunit的inheritance者(都是用c写的)

  • supervisord使用python

我一直在用Alpine Linux lxc容器中的相同作者使用runitsocklog来pipe理web / database和其他各种服务。 这是轻,易于pipe理,我没有服务失败。 日志守护进程也运行,因为它是自己的用户&而不是root ,这是很好的。

voidlinux使用runit作为init系统,也用于服务监督 (在runit脚本中searchrun文件的包树)。