我们有一个自定义设置,其中有几个守护进程(Web应用程序+后台任务)正在运行。我正在考虑使用一个服务,它可以帮助我们监控这些守护进程,并在它们的资源消耗超过一定水平时重新启动它们。我将欣赏任何关于何时一个比另一个更好的见解。据我所知,monit 启动一个新进程,而 supervisord 启动一个子进程。这种方法的优点和缺点是什么?我还将使用upstart来监控monit或supervisord本身。Web应用程序部署将使用capistrano完成。
goqiplq21#
我还没有使用monit,但有一些重大的缺陷与监督。1.程序应在前台运行这意味着您不能只执行/etc/init.d/apache 2 start。大多数时候你可以只写一行。“source /etc/apache 2/envvars && exec /usr/sbin/apache 2-DFOREGROUND”,但有时您需要自己的 Package 脚本。 Package 器脚本的问题是,最终会有两个进程,一个父进程和一个子进程。看到了下一个破绽......
7rfyedvj2#
如果你想额外监控资源,你应该满足于monit。除了检查进程是否正在运行(可用性)之外,monit还可以执行一些资源使用情况(性能,容量使用情况),负载级别甚至基本安全检查(bianry文件,配置文件等的md5sum)。它有一个基于规则的配置,很容易理解。还有很多准备好使用的配置:http://mmonit.com/wiki/Monit/ConfigurationExamplesMonit要求进程创建PID文件,这可能是一个缺陷,因为如果一个进程没有创建PID文件,你就必须创建一些 Package 器。参见http://mmonit.com/wiki/Monit/FAQ#pidfile另一方面,Supervisord更多地绑定到一个进程,它自己生成它。它不能将任何基于资源的检查作为monit。它有一个很好的CLI servicectl和一个Web GUI。
servicectl
2条答案
按热度按时间goqiplq21#
我还没有使用monit,但有一些重大的缺陷与监督。
1.程序应在前台运行
这意味着您不能只执行/etc/init.d/apache 2 start。大多数时候你可以只写一行。“source /etc/apache 2/envvars && exec /usr/sbin/apache 2-DFOREGROUND”,但有时您需要自己的 Package 脚本。 Package 器脚本的问题是,最终会有两个进程,一个父进程和一个子进程。看到了下一个破绽......
如果你的程序启动了子进程,supervisord将不会检测到。如果父进程终止(或者使用supervisorctl重新启动),子进程将继续运行,但将被init进程“采用”并继续运行。这可能会阻止将来对程序运行的调用,或者会消耗额外的资源。最新的配置选项stopasgroup和killasgroup应该可以解决这个问题,但对我不起作用。
我最近用qlproxy设置了squid。qlproxyd需要首先启动,否则squid可能会失败。尽管这两个项目都是由监督管理的,但没有办法确保这一点。我需要为squid编写一个启动脚本,让它等待qlproxyd进程。添加启动脚本会导致缺陷2中描述的孤立进程问题
有时候,当一个进程无法启动(或崩溃)时,这是因为它无法访问另一个资源,可能是由于网络抖动。Supervisor程序可设置为多次重新启动该过程。在两次重新启动之间,该过程将进入“BACKOFF”状态,但没有关于回退持续时间的文档或控制。
为自己辩护,Supervisor确实在80%的时间里满足了我们的需求。该配置是合理的,文档也相当不错。
7rfyedvj2#
如果你想额外监控资源,你应该满足于monit。除了检查进程是否正在运行(可用性)之外,monit还可以执行一些资源使用情况(性能,容量使用情况),负载级别甚至基本安全检查(bianry文件,配置文件等的md5sum)。它有一个基于规则的配置,很容易理解。还有很多准备好使用的配置:http://mmonit.com/wiki/Monit/ConfigurationExamples
Monit要求进程创建PID文件,这可能是一个缺陷,因为如果一个进程没有创建PID文件,你就必须创建一些 Package 器。参见http://mmonit.com/wiki/Monit/FAQ#pidfile
另一方面,Supervisord更多地绑定到一个进程,它自己生成它。它不能将任何基于资源的检查作为monit。它有一个很好的CLI
servicectl
和一个Web GUI。