如何监视在linux中运行的两个服务,并在一次崩溃后重新启动它们

时间:2012-05-15 01:02:54

标签: c linux

我在linux中运行了两个服务,称之为AB。每个都依赖于另一个,所以如果一个崩溃并重新启动,另一个必须立即重新启动。

我已经编写了一个监控程序来分别启动和监控这两个服务,程序可以在崩溃时重启一个服务。

我想改进监控程序,以便当它发现一个服务崩溃时,它将获得另一个服务的PID并将其终止。

2 个答案:

答案 0 :(得分:1)

有一些很棒的解决方案可以为不同的事件编制特定的响应。

daemontools - http://cr.yp.to/daemontools.html

upstart(如果你使用ubuntu) - http://upstart.ubuntu.com/

主管 - http://supervisord.org/

答案 1 :(得分:1)

监控进程将使用fork(2)生成两个孩子,对吧?如果是这样,父母将返回子PID,它可以保存在每个孩子的变量中。

产生两个进程后,父监视器可以坐在一个循环中,等待waitpid(2)调用。使用正确的选项,此调用可以阻止,直到其中一个子节点终止,然后您返回子节点的PID及其退出状态。基于此,您可以对另一个子进行kill(2),并重新执行fork序列以生成两个子进程的新实例。

请注意,在杀死第二个孩子后,您的下一个waitpid调用将返回该PID的PID,而不是新的一对孩子。因此,您需要检查返回的PID与两个当前子项的PID,如果不匹配则忽略它。