使用 daemontools 监控 apache

使用 daemontools 监控 apache

我正在尝试设置守护进程工具对于一个服务器中的两个 apache。一个 apache 2.2 监听端口 80 代理请求,另一个 apache 1.3 监听端口 8888。./run 脚本如下:

#!/bin/sh
# apache 1.3
exec /apache_1_3/apache/bin/httpd -F

#!/bin/sh
# apache 2.2
exec /apache_2_2/apache/bin/httpd -D FOREGROUND

daemontools 可以很好地监控 apache。但是,如果我停止 apache2.2(使用 svc -t 或 apachectl),apache 1.3 将在 error_log 中看到以下错误

[crit] (98)Address already in use: make_sock: could not bind to port 8888

我必须手动 apachectl stop apache1.3 来停止错误消息破坏日志文件。

在使用daemontools之前没有这个问题。

知道为什么会发生这种情况吗?

答案1

您不应该在单个脚本中定义两个守护进程。您正在执行两个守护进程,但我相信 Daemontools 只会监视第二个exec守护进程。

我认为以下是正在发生的事情:

  • 你的脚本产生了两个进程
    • Daemontools 启动第一个进程和第二个进程,但只会监视第二个进程。第一个进程被忽略。
  • 你杀死了第二个进程。第一个进程 Apache 1.3 仍在运行。
  • Daemontools 注意到第二个进程已停止,因此它重新运行该run脚本。
  • 您的脚本尝试再次生成两个进程。
    • Apache 1.3 进程无法重新启动,因为 Apache 已在运行并监听该端口。
    • apache2.2 进程启动正常。

相关内容