5

我应该如何编写 daemontools 主管的脚本?

我已经开始使用 DJ Bernsteins 的 daemontools 来保持一些进程运行并且工作正常。但是现在我需要监控这些过程的一些附加条件,但我没有找到关于如何做到这一点的好信息。

我的场景是我有一些为 Web 应用程序(pharo smalltalk 虚拟机)运行的进程,它们响应 http,每个进程都在其端口中(用于负载平衡)。我想以某种方式对它们进行 ping 操作,以验证它们不仅在运行,而且还在响应 http 请求。如果他们没有以某种方式响应超过 30 秒的请求,则应将其视为崩溃并简单地重新启动。

这甚至可以使用 daemontools 吗?如果是这样,我应该如何编写这个脚本,我应该把它放在哪里?或者这方面的文档在哪里?

4

2 回答 2

6

最简单的解决方案是使用休眠 30 秒的脚本创建另一个 daemontool 任务,然后测试服务是否存在(例如使用 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 参数、内存消耗、数据库统计信息……然后该工具会随着时间的推移绘制漂亮的图表并让您指定边界当事情表现不佳时得到通知。

于 2012-05-19T09:18:46.803 回答
3

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

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

你可以编写更复杂的东西,比如检查响应是否为 200(OK)等。

于 2012-05-19T01:37:23.537 回答