Daemontools(djbtools)的替代品可以监督Unix进程?


26

我使用Daemontools提供了一种简单可靠的方法来监督服务器上的Unix服务。它运作良好,但是需要一种不同的思维方式(DJB方式),并且一些常见的抱怨是:

  • 基于TAI64N的时间戳
  • 不在/etc/init.d(或(/usr/local)/etc/rc.d)下存储脚本
  • 并非总是与apachectl之类的脚本一起使用。一些脚本需要重写。

我记得大约两年前有一些类似的“主管/看门狗”守护程序在工作,但有些仍然有些粗糙。

如果您已从Daemontools切换到其他功能,那么您选择了什么并且对您来说效果很好?RedHat或Ubuntu默认情况下是否带有任何流程管理器实用程序?

Answers:


16

嗯,如果您使用的是Ubuntu,则其新的初始化过程upstart包括一定程度的过程监督。它可以用于您标准的服务启动和停止(如SysV初始化脚本),它还可以监视正在运行的应用程序,并在应用程序死亡时重新生成它们。

您还可以根据需要通过inittab实施穷人的流程重启。

如果你主要是寻找的东西,以保持眼睛上的进程,以确保它始终运行,然后重新启动它时,它不是,我已经受够了很大的运气restartd。不幸的是,我知道的唯一来源是Debian软件包。但是,它是一个非常小而简单的应用程序,基本上只有一个.c和.h文件以及一个make文件。从Red Hat上的Debian源tarball编译它是微不足道的(我在上一份工作中甚至做了RPM)。

我听说但没有使用的最后一个选项是Supervisor。它看起来像是一个很有前途的工具,但是对于我来说,过去的重新启动对于我来说已经足够好了,对于我所需要的东西,我还没有去使用它。


12

为runit +1。与daemontools相比,功能更多,更灵活,并且与现有daemontools参数和选项兼容。挺整洁的。

但是正如您提到的,许多工具都带有自己的控制二进制文件apache2ctl,ejabberdctl,penchctl,collected等。尽管存在黑客攻击,但有时最好还是坚持使用提供的工具,主要是在不确定最干净的情况下可能的实现。我通常会做出妥协,并且让大多数服务在runit的监督下运行。而其他的则可以使用简单的方式运行。


1
+1值得一提的是,该runsv命令runit支持自定义控件,因此可以根据守护程序的本机控件二进制文件来实现重新启动。
pilcrow 2012年

4

好吧,那是runit。我无法告诉您它与daemontools的区别和相似之处,但是从Berstein风格的网站来看,我想说这肯定会受到Bernstein的影响。


2
我的投票是对runit的投票,因为您可以将它放入SysVInit协议中,并使其以相当透明的方式接管/etc/init.d/ <scriptname>。
艾利·佩恩


4

作为已经提到的daemonize和的替代daemontools,还有libslack软件包的daemon命令。

daemon 是非常可配置的,并且确实关心所有繁琐的守护程序,例如自动重启,日志记录或pidfile处理。



3

还有libslack的守护程序工具,该工具用C语言编写,可用于各种(Unix)平台。

它是可配置的,并且确实关心所有繁琐的守护程序,例如自动重启,日志记录或pidfile处理。


2

Ubuntu附带了Upstart-我对此不太了解,但我知道它确实具有“主管”功能。Apple 推出的产品是另一个选择(Wikipedia文章的“另请参见”部分也列出了很多其他内容,包括Upstart和RunIt)。

他们都有自己的优点和自己的übersuck特殊品牌-每当有人问我有关“过程主管” /“看门狗”程序的问题时,我总是会问同样的问题:您为什么需要一个?


-2

没有针对此的流行/社区共识工具,因为走这条路的每个人都意识到它的死路一条。如果长时间运行的进程经常失败,以至于简单的监视就不够好,那么请停止使用它们,并将代码移到事件驱动更多的地方。

编辑:正如克里斯在下面指出的那样,有时您会完全陷入困境,在这种情况下,* / 1 cron作业会查找进程/ pidfile,如果缺少则运行启动/重新启动,并将结果通过电子邮件输出给负责人开发人员/产品经理是您的后备职位。


3
说起来容易,做起来难。;-)有时,无论您的应用程序有多不稳定或崩溃,都必须运行它们,您可以采取任何措施使它们保持运行状态,这将有助于减少凌晨3点的通话次数。无论如何,这都不理想,但有时效果会很好。
Christopher Cashell

1
这个答案错过了处理器管理程序的两个功能:将多个进程组作为一个单元进行管理的能力以及管理依赖项的能力。例如,您的网站可能涉及一个Web服务器,数据库服务器以及几个作为外部进程运行的Web应用程序。这些过程可能具有依赖性-例如,数据库需要在Web应用程序之前启动。一个好的流程主管将使您可以使用一个命令来启动和停止这组流程,并确保一切按正确的顺序启动。
larsk 2012年

1
在理想的世界中,一切都将完美运行。不幸的是,这不是一个理想的世界。
马特

问题不是经常失败。该问题每周失败一次,并且不会立即重新启动。这不是一个真正的答案。
dan3

@ChristopherCashell处于正确的轨道。应用程序内部的监督通常是过度设计的(并且碰巧不是UNIX哲学。)无论为解决每个崩溃而付出了多少积极的努力,都可以假设软件总是不完善的。监督是一个独特的外部层,是一种保险单。最好使生产服务无论如何都可以继续运行,即使它们“不应该崩溃”也是如此,因为事实是这样的。我希望重新启动服务,记录该异常并在早上进行修复。(服务扑是另一个要考虑的情况下。)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.