Какие лучшие методы я мог бы использовать, чтобы Apache подождал несколько секунд и проверил, что его адреса запущены и работают перед запуском?
Хорошо, метод, который я обрисовываю в общих чертах, очевидно, не решает основную проблему. Но я считаю, что использование автономного инструмента мониторинга, который может справиться с задачей «запуска Apache в сервис» без необходимости взламывать скрипт init.d
является более стабильным решением. Ключ заключается в том, чтобы использовать monit
который описывается как:
Monit - это небольшая утилита с открытым исходным кодом для управления и мониторинга Unix-систем. Монит проводит автоматическое обслуживание и ремонт и может выполнять значимые причинно-следственные действия в ситуациях ошибки.
Чтобы установить его в Ubuntu, просто сделайте это; Я использую aptitude
и это на Ubuntu 12.04 FWIW:
sudo aptitude install monit
После установки мне нравится настраивать почтовый сервер по умолчанию для отправки предупреждений. Предполагается, что на вашем сервере активен postfix
или sendmail
. Откройте файл контроля monit
с вашим любимым текстовым редактором; Мне нравится использовать nano
:
sudo nano /etc/monit/monitrc
Посмотрите на set mailserver
линии набора и установить эту строку и сохраните файл управления monit
set mailserver localhost
Теперь проверьте и убедитесь, что есть настройка каталога monit
conf.d
; Здесь настраиваются отдельные задачи monit
:
ls -la /etc/monit/conf.d
Если каким-либо образом этот /etc/monit/conf.d
не был настроен, создайте его следующим образом:
sudo mkdir /etc/monit/conf.d
Теперь, когда все готово, давайте создадим набор правил monit
Apache. Сначала выясните , где установлен Apache-файл .pid
и проверьте, установлен ли он. Обычно это происходит в Ubuntu 12.04 с использованием установленного по умолчанию пакета Apache:
ls -la /var/run/apache2.pid
Если этот .pid
filepath правильный, давайте создадим фактический набор правил monit
Apache с помощью nano
:
sudo nano /etc/monit/conf.d/apache2.conf
И поместите этот код в этот файл и сохраните его:
check process apache with pidfile /var/run/apache2.pid
start "/etc/init.d/apache2 start"
stop "/etc/init.d/apache2 stop"
if failed host 127.0.0.1 port 80
with timeout 15 seconds
then restart
alert YourEmail@example.com only on { timeout, nonexist }
Логика сценария довольно проста: набор правил monit
Apache проверит файл /var/run/apache2.pid
и знает, как использовать специальные директивы init.d
для логики start
и stop
. Волшебство происходит из блока if
/then
который в основном отслеживает порт 80
Apache на локальном 127.0.0.1
и примет меры для восстановления Apache, если время ожидания составляет 15 секунд или более. А линия alert
будет отправлять оповещения по электронной почте на указанный адрес электронной почты, если соблюдены условия timeout
или nonexist
существует; это необязательно, поэтому не стесняйтесь комментировать это, если у вас нет необходимости быть залитым по электронной почте.
Теперь перезапустите monit
:
sudo service monit restart
И вы можете следить за monit
чтобы увидеть, как он работает, и отладить его, если что-то не работает должным образом:
sudo tail -f -n 200 /var/log/monit.log
Поэтому, когда пыль оседает на этом сервере, у вас будет monit
настроить монитор , чтобы убедиться, что Apache работает. Очень полезен в качестве общего инструмента «поддерживать работу веб-сервера Apache», но в вашем случае monit
может взять на себя задачу убедиться, что Apache запускается при перезагрузке / запуске, чтобы вам не пришлось возиться с ядром Apache init.d
скрипт, который действительно немного грязный и легко забываемый в будущем при обновлении.
Также обратите внимание, я вижу, что вы явно привязываете Apache к IPv6, но этот сценарий мониторинга предполагает, что если он не может достичь 127.0.0.1
то он должен предпринять действия. Возможно, вам нужно изменить локальный IPv4-адрес 127.0.0.1
на IPv6-эквивалент адреса ::1
. Поэкспериментируйте и посмотрите, что работает.