我正在尝试设置守护进程工具对于一个服务器中的两个 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 进程启动正常。