使用supervisord比使用monit有什么好处

我们有一个自定义设置,其中有几个守护进程(web应用程序+后台任务)正在运行。我正在考虑使用一种服务,它可以帮助我们监视这些守护进程,并在它们的资源消耗超过某个级别时重新启动它们

我将感谢任何关于何时一个优于另一个的见解。据我所知,monit启动了一个新流程,而supervisord启动了一个子流程。这种方法的优缺点是什么

我还将使用upstart来监视monit或supervisord本身。webapp部署将使用capistrano完成

谢谢

我没有使用monit,但是supervisord有一些明显的缺陷

  1. 程序应该在前台运行

这意味着您不能只执行/etc/init.d/apache2 start。大多数情况下,您可以只编写一行代码,例如“source/etc/apache2/envvars&exec/usr/sbin/apache2-DFOREGROUND”,但有时您需要自己的包装器脚本。包装器脚本的问题在于,最终会有两个进程,一个是父进程,另一个是子进程。查看下一个缺陷

  1. supervisord不管理子进程

如果您的程序启动子进程,supervisord将不会检测到这一点。如果父进程死亡(或者使用supervisorctl重新启动),子进程将继续运行,但将被init进程“采用”,并保持运行。这可能会阻止将来调用正在运行的程序或消耗额外的资源。最近的配置选项stopasgroup和killasgroup应该可以解决这个问题,但对我来说不起作用

  1. supervisord没有依赖关系管理-请参见#122

我最近用qlproxy安装了squid。qlproxyd需要首先启动,否则squid可能会失败。即使这两个项目都由supervisord管理,也无法确保这一点。我需要为squid编写一个启动脚本,让它等待qlproxyd进程。添加启动脚本导致缺陷2中描述的孤立进程问题

  1. supervisord不允许您控制startretries之间的延迟

有时,当一个进程无法启动(或崩溃)时,这是因为它无法访问另一个资源,可能是由于网络不稳定。可以将Supervisor设置为多次重新启动流程。在重新启动之间,进程将进入“退避”状态,但在退避的持续时间内没有文档记录或控制

在它的防御系统中,80%的时间都能满足我们的需求。配置是合理的,文档也很好

发表评论