用daemontools监督Apache

我正在尝试在一台服务器上安装daemontools两个apaches。 一个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 

守护进程监视这两个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停止apache1.3停止错误信息clobber日志文件。

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

任何想法为什么发生这种情况?

你不应该在一个脚本中定义两个守护进程。 您正在放弃两个守护进程,但我相信Daemontools只会监视第二个守护进程。

以下是我相信正在发生的事情:

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