Какие лучшие методы я мог бы использовать, чтобы 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 . Поэкспериментируйте и посмотрите, что работает.