Надеюсь, что кто-нибудь поможет нам понять это поведение.
У нас есть куча сервисов daemontools в / etc / service /. Одна из служб управляет 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
на один услуга принесет Другой обслуживание вверх?
Спасибо за любую подсказку, которую вы можете предложить.
Для меня -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 () и др.).
Мое предложение было бы не использовать daemontools для запуска Apache, но вместо этого вам следует упростить сценарий выполнения.
Начнем с минимума:
#!/bin/bash
exec apache2 -f /path/to/httpd.conf -D NO_DAEMONIZE
Если вам нужно / вы хотите использовать envdir
вы можете запустить apache с этим вместо exec
.
В ulimit
call, вероятно, не является необходимым, но может быть добавлен в любом месте сценария выполнения перед запуском Apache.
Re: действительно странное поведение, которое вы видите, там являются некоторые функциональные различия между -DFOREGROUND
и -DNO_DAEMONIZE
- последнее - это то, что я всегда видел рекомендованным для запуска Apache под daemontools (которому предшествует обязательное «Не делайте этого») - я не знаю, почему любое из этих различий может вызвать описанное вами поведение.