Как заставить Apache2 ждать инициализации сети?

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

Вывод ошибки из запуска 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. 

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

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

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

One Solution collect form web for “Как заставить Apache2 ждать инициализации сети?”

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

Ну, метод, который я излагаю, очевидно, не решает основной проблемы. Но я считаю, что использование автономного средства мониторинга, которое может справиться с задачей «пинать Apache в службу» без необходимости взломать скрипт init.d является более стабильным решением. Ключ должен использовать monit который описывается как:

Monit – небольшая утилита с открытым исходным кодом для управления и мониторинга Unix-систем. Monit проводит автоматическое техническое обслуживание и ремонт и может выполнять значимые причинные действия в ситуациях с ошибками.

Чтобы установить его в Ubuntu, просто сделайте это; Я использую aptitude и это на Ubuntu 12.04 FWIW:

 sudo aptitude install monit 

После установки мне нравится настраивать почтовый сервер по умолчанию для отправки предупреждений. Предполагается, что на вашем сервере есть postfix или sendmail . Откройте monit управления monit с помощью вашего любимого текстового редактора; Мне нравится использовать nano :

 sudo nano /etc/monit/monitrc 

Посмотрите на set mailserver строки monit и установите эту строку и сохраните monit управления monit :

 set mailserver localhost 

Теперь проверьте и убедитесь, что установлена ​​установка monit conf.d ; Здесь monit индивидуальные задачи monit :

 ls -la /etc/monit/conf.d 

Если каким-то образом /etc/monit/conf.d не был настроен, создайте его так:

 sudo mkdir /etc/monit/conf.d 

Теперь с этим сделаем, давайте создадим monit набор Apache для monit . Сначала .pid , где .pid файл Apache .pid и убедитесь, что он установлен. Обычно это устанавливается на Ubuntu 12.04, используя установку пакета Apache по умолчанию:

 ls -la /var/run/apache2.pid 

Если этот .pid верен, давайте создадим фактический набор правил 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 который в основном контролирует порт Apache 80 на localhost 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 тогда он должен принять меры. Возможно, вам нужно изменить адрес localhost адреса IPv4 127.0.0.1 на эквивалент IPv6 адреса ::1 . Экспериментируйте и посмотрите, что работает.

  • Как изменить расположение сети в Windows 7?
  • Поддерживается ли домашняя группа Windows 7 (рабочая группа) и домен Windows Vista?
  • Доступ к домашнему сетевому принтеру, когда я использую VPN для подключения к работе
  • Документы Word очень медленно открываются по сети, но отлично при открытии локально - на одной машине
  • Проблемы с подключением к Интернету после установки Windows Phone 8 SDK
  • Как я могу решить проблемы Windows PPTP VPN?
  • Что означает среднее значение 0.0.0.0 в таблице маршрутизации?
  • Странно, я не могу пинговать свой шлюз от виртуальных машин Linux
  • Как перенести файлы с Mac (OS9) на Windows 7 (или XP) с помощью прямого подключения к сети Ethernet
  • Проблема с постоянными маршрутами и VPN-подключением в Windows 7
  • Как определить скорость (быстрый или гигабитный Ethernet) сетевого подключения по командной строке Windows
  • Почему моя маска подсети 255.255.255.255?
  • Interesting Posts

    Блокировать доступ к веб-сайту через http, но не https, через etc / hosts?

    Размер шрифта emacs в ubuntu

    Excel: Как я могу ссылаться на целую строку, за исключением пары ячеек?

    Как сделать резервную копию резервной копии в Acronis True Image?

    Список содержимого tarball в формате дерева

    Показать Анимированный GIF

    Автоматически шифровать и расшифровывать электронные письма с помощью gnupg (gpgrelay для unix)

    Что такое монада?

    Установка Windows: не удалось создать новый раздел или найти существующий

    Установка полного образа диска, спасенного ddrescue

    Преобразование субтитров DVD в текст

    Windows Server 2008 Create Symbolic Link, обновленная политика безопасности по-прежнему дает привилегию

    Возьмите входной сигнал Char от сканера

    Как я могу автоматически отключить загрузку и завершение работы Windows?

    Значки наложения TortoiseSVN не отображаются при установке другой учетной записью пользователя?

    Давайте будем гением компьютера.