希望有人可以帮助我们理解这种行为。
/etc/service/ 下有一堆 daemontools 服务。其中一个服务控制 apache,运行脚本中包含该服务。
exec envdir /var/lib/supervise/wwwproxy/env setuidgid root bash <<-BASH
ulimit -n 8192 # also increase the running user's file descriptor limit
exec apache2 -f /path/to/demo_apache2.conf -D FOREGROUND
BASH
我们遇到的问题svc -d /etc/service/*
实际上是重新启动了所有服务,但并没有关闭它们。我们最终将问题追溯到那项服务,发现这svc -d /etc/service/apache2
会带来向上任何其他服务都已关闭,包括其本身。
将 FOREGROUND 更改为 NO_DAEMONIZE 可以修复此行为,但我们确实想了解发生了什么。有人能解释一下svc -d
为什么一服务将带来其他服务正常吗?
感谢您提供的任何线索。
答案1
对我来说-D NO_DAEMONIZE
不起作用,我不得不使用-D NO_DETACH
。(CentOS 6.3,Apache/2.2.15)
也可以看看http://httpd.apache.org/docs/2.2/programs/httpd.html:
还可以用于设置某些不太常见的启动参数,包括 -DNO_DETACH(防止父级分叉)和 -DFOREGROUND(防止父级调用 setsid() 等)。
答案2
我的建议是不要使用 daemontools 运行 Apache,但除此之外,您应该简化您的运行脚本。
从最基本的开始:
#!/bin/bash
exec apache2 -f /path/to/httpd.conf -D NO_DAEMONIZE
如果您需要/想要使用,envdir
您可以使用它来启动 Apache,而不是exec
。
该ulimit
调用可能不是必需的,但可以在启动 Apache 之前将其添加到运行脚本中的任何位置。
回复:你看到的实际奇怪行为是-DFOREGROUND
和之间存在一些功能差异-DNO_DAEMONIZE
——后者是我一直看到的推荐在 daemontools 下运行 Apache 的方法(前面加上强制性的“不要那样做”)——但我不知道为什么这些差异会导致您所描述的行为。