希望有人能帮助我们理解这种行为。
我们在/ 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/*实际上具有重新启动所有服务的效果,并没有把它们closures。 我们终于把它追踪到了这一个服务,发现svc -d /etc/service/apache2会调出其他服务,包括它本身。
将FOREGROUND更改为NO_DAEMONIZE可以修复此行为,但是我们真的很想了解正在发生的事情。 任何人都可以解释为什么一个服务上的svc -d会带来其他服务吗?
感谢您提供的任何线索。
对于我-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()等)。
我的build议是不使用daemontools来运行Apache ,而是代替你应该简化你的运行脚本。
从最低限度开始:
#!/bin/bash exec apache2 -f /path/to/httpd.conf -D NO_DAEMONIZE
如果你需要/想要使用envdir你可以用exec来启动apache。
ulimit调用可能不是必须的,但可以在启动Apache之前添加到运行脚本的任何地方。
Re:你看到的实际奇怪的行为,在-DFOREGROUND和-DNO_DAEMONIZE之间有一些function上的区别 – 后者是我一直看到的在daemontools下运行Apache的build议(之前是“Do not Do That “) – 我不知道为什么这些差异会导致你描述的行为。