2

Сервер только что обновлен с Squeeze до Wheezy. После перезагрузки я заметил, что apache2 не запускается, поэтому установил bootlogd, чтобы проверить вывод сценариев инициализации.

Вывод ошибки при запуске Apache был,

Tue Feb  3 08:49:55 2015: [....] Starting web server: apache2(99)Cannot assign requested address: make_sock: could not bind to address [0123:4567:890:abc::d]:80
Tue Feb  3 08:49:55 2015: no listening sockets available, shutting down
Tue Feb  3 08:49:55 2015: Unable to open logs
Tue Feb  3 08:49:55 2015: Action 'start' failed.
Tue Feb  3 08:49:55 2015: The Apache error log may have more information.

Временные метки в выходных данных загрузки показывают 4 с между "Конфигурированием сетевых интерфейсов" (08:49:51) и запуском apache.

Я работал над этим, вставляя sleep 5 в /etc/init.d/apache2 после чего apache2 запускается нормально, поэтому я читаю его как медленную инициализацию сети (возможно, специфичную для сетей IPv6). Сервер работает на VMWare, и у меня есть доступ только к виртуальной машине.

  • Какие лучшие методы я мог бы использовать, чтобы Apache подождал несколько секунд и проверил, что его адреса запущены и работают перед запуском?
  • Или заставить сетевой сценарий инициализации не выходить, пока адреса не будут готовы?

1 ответ1

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .