如何使用daemontools监督网络服务器?

时间:2012-05-18 10:11:45

标签: webserver daemon smalltalk supervisor start-stop-daemon

我应该如何编写daemontools监督员的脚本?

我已经开始使用D. J. Bernsteins的daemontools来保持一些进程运行并且运行正常。但是现在我需要监控这些流程的其他几个条件,但我没有找到关于如何做到这一点的好信息。

我的情况是我有一些针对Web应用程序(pharo smalltalk虚拟机)运行的进程,并且它们响应http,每个进程都在其端口(用于for loadbalance)。我想以某种方式ping那些来验证它们不仅运行但响应http请求。如果他们没有以某种方式回应超过30秒的请求,他们应该被视为崩溃并且只需重新启动。

这是否可以使用daemontools?如果是这样,我应该如何编写这个脚本?我应该把它放在哪里?或者关于这个的文件在哪里?

2 个答案:

答案 0 :(得分:6)

最简单的解决方案是创建另一个daemontool任务,其脚本可以休眠30秒,然后测试是否存在服务(例如,使用wget或curl)。如果服务未及时响应,您可以重新启动服务(svc -t yourapp)和/或发送通知。新服务的运行脚本看起来很简单:

#!/bin/sh
sleep 30
if ! wget --quiet --timeout=5 --delete-after "http://yourapp.com/" ; then
  svc -t /etc/service/yourapp
fi

我也使用Munin等工具积累了丰富的经验。您需要再次提供一个脚本,提供有关图像状态的信息。如果使用REST服务设置图像,您甚至可以提供非常有趣的指标,例如活动会话,非活动会话,gc参数,内存消耗,数据库统计信息......然后,该工具会随着时间的推移绘制出漂亮的图形,并允许您指定边界到当事情表现不好时得到通知。

答案 1 :(得分:3)

要检测服务是否响应,您可以使用curl(非常适合HTTP和命令行/ shell脚本)

curl --connect-timeout 10 http://8.8.8.8 
curl: (28) connect() timed out!

您可以编写更复杂的内容,例如检查响应是否为200(OK)等。