使用supervisord比monit有什么好处

时间:2012-08-28 09:31:47

标签: linux ubuntu monit supervisord

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

我会很高兴看到一个人比另一个更好的见解。据我所知,monit会在supervisord启动子流程时旋转一个新进程。这种方法的优点和缺点是什么?

我也将使用暴发来监控monit或supervisord本身。 webapp部署将使用capistrano完成。

由于

2 个答案:

答案 0 :(得分:34)

我没有使用monit,但是有一些重要的缺陷与监督。

  1. 程序应该在前台运行
  2. 这意味着你不能只执行/etc/init.d/apache2 start。大多数时候你可以写一个单行,例如“source / etc / apache2 / envvars&&& exec / usr / sbin / apache2 -DFOREGROUND”但有时您需要自己的包装器脚本。包装器脚本的问题在于您最终得到两个进程,父进程和子进程。看下一个缺陷...

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

      1. supervisord没有依赖关系管理 - 请参阅#122
      2. 我最近用qlproxy设置了squid。 qlproxyd需要先启动,否则squid会失败。尽管这两个程序都是用supervisord管理的,但是没有办法确保这一点。我需要为squid编写一个启动脚本,使其等待qlproxyd进程。添加启动脚本导致了漏洞2中描述的孤立进程问题

        1. supervisord不允许您控制startretries之间的延迟
        2. 有时当一个进程无法启动(或崩溃)时,这是因为它无法访问另一个资源,可能是由于网络抖动。可以将主管设置为多次重启该过程。在重新启动之间,进程将进入“BACKOFF”状态,但是没有文档或控制退避的持续时间。

          在其防务主管中,80%的时间确实满足了我们的需求。配置合理,文档非常好。

答案 1 :(得分:30)

如果你想要额外监控资源,你应该接受monit。除了检查进程是否正在运行(可用性)之外,monit还可以执行一些资源使用(性能,容量使用),负载级别甚至基本安全检查(bianry文件的md5sum,配置文件等)的检查。它有一个基于规则的配置,很容易理解。还有很多可以使用的配置:http://mmonit.com/wiki/Monit/ConfigurationExamples

Monit需要进程来创建PID文件,这可能是一个缺陷,因为如果一个进程没有创建pid文件,你必须创建一些包装器。见http://mmonit.com/wiki/Monit/FAQ#pidfile

另一方面,Supervisord更加局限于一个过程,它自己产生它。它不能将任何基于资源的检查作为监控。它有一个很好的CLI servicectl和一个Web GUI。

相关问题