Я хочу запустить apache на Ubuntu 10.04 и использовать приятные средства наблюдения в upstart (я говорю не только о скрипте инициализации apache, но и о надлежащем надзоре за сервисом в духе daemontools - то есть перезапуске apache, когда он умирает, как это).
У кого-нибудь есть запущенный конфиг upstart для наблюдения за apache на ubuntu 10.04?
Googles мне не помогли, но, возможно, мой google-fu слаб.
Ответы:
Woooo!
Я написал свою собственную версию, которая в значительной степени работает - с некоторым взломом файла conf и использованием
-D NO_DETACH
.Прежде всего , я должен был установить
User
,Group
иPidFile
в/etc/apache2/apache2.conf
вручную, а не иметь их , поступающие из/etc/apache2/envvars
. Я не мог найти способ заставить эти переменные быть экспортированными должным образом (я попробовал обаenv
иexport
согласно http://manpages.ubuntu.com/manpages/lucid/man5/init.5.html , но безрезультатно ).Тогда это моя работа
/etc/init/apache2.conf
:Я могу сделать
start|stop|status|reload apache2
и получить значимые результаты; если я ведуkill -9
основной процесс Apache, он сразу же возрождается и запускается и останавливается при загрузке, как и ожидалось. Так что это работает достаточно хорошо, я считаю.Были вещи, которые я пробовал, но не мог работать.
-D NO_DETACH
, в сочетании с:Не удалось запустить службу.
/etc/apache2/envvars
для заполнения${APACHE_*}
переменных:Это не удалось запустить, и произвел ошибку о
apache2: bad user name ${APACHE_RUN_USER}
.Пробный вывод консоли и параметры консоли по умолчанию; в этот момент я действительно просто пытался получить содержательные сообщения об ошибках. Казалось, не имеет значения.
console output
Это было полезно для отладки сообщений apache:
exec /usr/sbin/apache2 -X -e debug -E /var/log/apache2/foo.log
Это была еще одна попытка не изменить,
/etc/apache2/apache2.conf
которая не удалась:exec APACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data APACHE_PID_FILE=/var/run/apache2.pid /usr/sbin/apache2 -D NO_DETACH -e debug -E /var/log/apache2/foo.log
источник
Ну, этот сценарий работал для меня:
источник
Я также столкнулся с этой проблемой, однако я использовал другой подход. Самый простой способ получить переменные env - использовать исходную команду и указать ее в файле apache envvars, после чего вы можете запустить apache с опциями -D FOREGROUND
так что в основном вам нужен скрипт, который выглядит следующим образом (мой находится в /etc/apache2/apache2_foreground.sh):
Затем вы делаете его исполняемым и указываете супервизору на его местоположение, вам также нужно использовать стоп-сигнал 6
Две первые строки в скрипте перехватывают идентификатор группы процессов скрипта и устанавливают ловушку, которая запускается по сигналам, передаваемым процессу - эта ловушка выполняет уничтожение с отрицательным идентификатором родительского процесса, который запускает все процессы apache2 (скрипт само по себе) - уничтожение с отрицательным PID означает уничтожение всех дочерних элементов такого процесса (так что в этом случае все процессы apache2), без этого я не смог заставить супервизор уничтожить процессы apache2
Стоп-сигнал 6 используется, поскольку я не мог найти любой другой сигнал, который мог бы вызвать ловушку, 9 не может быть пойман, а 2 и 3 ничего не делают (скрипт не убит)
после этого он должен работать без каких-либо изменений в конфигурации apache2
источник
Пара сообщений от Скотта Джеймса Ремнанта на тему, которая, я надеюсь, может вам помочь:
источник
О, да, обычно ответом будет «напиши свое», поэтому мое типичное предложение - обратиться к странице « Начало работы - выскочка» и… напечатать.
Я надеюсь, что кто-то более знающий в этом вопросе, чем я, придумает рабочий сценарий выскочки.
источник
Я бы использовал подход, похожий на подход Бена Уильямса, но
-D FOREGROUND
вместо-D NO_DETACH
.источник