Как избежать тайм-аутов и заставить Apache2 запускаться при запуске системы?

Я использую Ubuntu 18.04 с установленным по умолчанию Apache, в котором я настроил виртуальный каталог. Я хотел бы запустить Apache как службу, которая автоматически запускается при перезагрузке системы. Я заметил, что Apache не запускается после перезапуска системы, а затем заметил это

$ sudo /etc/init.d/apache2 start
[sudo] password for davea: 
[....] Starting apache2 (via systemctl): apache2.serviceJob for apache2.service failed because a timeout was exceeded.
See "systemctl status apache2.service" and "journalctl -xe" for details.
 failed!
davea

Я не был уверен, что это значит, поэтому я попытался получить статус, как рекомендовано выше ...

$ sudo systemctl status apache2.service
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: failed (Result: timeout) since Mon 2021-01-18 19:00:16 UTC; 4min 33s ago
  Process: 800 ExecStart=/usr/sbin/apachectl start (code=killed, signal=TERM)

Jan 18 18:58:47 prod systemd[1]: Starting The Apache HTTP Server...
Jan 18 18:58:47 prod apachectl[800]: Invoking 'systemctl start apache2'.
Jan 18 18:58:47 prod apachectl[800]: Use 'systemctl status apache2' for more info.
Jan 18 19:00:16 prod systemd[1]: apache2.service: Start operation timed out. Terminating.
Jan 18 19:00:16 prod systemd[1]: apache2.service: Failed with result 'timeout'.
Jan 18 19:00:16 prod systemd[1]: Failed to start The Apache HTTP Server.

Я все еще не понимаю, что еще мне нужно делать. Я могу перезапустить Apache без каких-либо проблем, используя

$ sudo apachectl restart
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 2607:f298:5:101d:f816:3eff:feac:4c03. Set the 'ServerName' directive globally to suppress this message

Не знаю, почему появляется предупреждение или меня это беспокоит, но я определил "ServerName" в моем файле conf ниже

/etc/apache2/sites-available/000-default-le-ssl.conf

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

Edit: В ответ на комментарии, здесь вывод configtest и journalctl сразу после перезапуска ...

$ sudo apachectl configtest
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 2607:f298:5:101d:f816:3eff:feac:4c03. Set the 'ServerName' directive globally to suppress this message
Syntax OK

$ sudo journalctl -xe
-- 
-- Unit UNIT has finished starting up.
-- 
-- The start-up result is RESULT.
Jan 22 01:36:35 prod systemd[1]: Started User Manager for UID 1001.
-- Subject: Unit user@1001.service has finished start-up
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- Unit user@1001.service has finished starting up.
-- 
-- The start-up result is RESULT.
Jan 22 01:36:35 prod systemd[1028]: Reached target Default.
-- Subject: Unit UNIT has finished start-up
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- Unit UNIT has finished starting up.
-- 
-- The start-up result is RESULT.
Jan 22 01:36:35 prod systemd[1028]: Startup finished in 219ms.
-- Subject: User manager start-up is now complete
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- The user manager instance for user 1001 has been started. All services queued
-- for starting have been started. Note that other services might still be starting
-- up or be started at any later time.
-- 
-- Startup of the manager took 219137 microseconds.
Jan 22 01:36:55 prod systemd-timesyncd[565]: Synchronized to time server [2001:67c:1560:8003::c8]:123 (ntp.ubuntu.com).
Jan 22 01:37:03 prod sudo[1172]: davea : TTY=pts/0 ; PWD=/home/davea ; USER=root ; COMMAND=/bin/journalctl -xe
Jan 22 01:37:03 prod sudo[1172]: pam_unix(sudo:session): session opened for user root by davea(uid=0)

Edit 2: Содержимое / lib /systemd/system/apache2.service после попытки предложенного ответа ...

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
EnvironmentFile=/etc/environment
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl graceful
PrivateTmp=true
Restart=on-abort
TimeoutStartSec=300

[Install]
WantedBy=multi-user.target

При перезагрузке по-прежнему не удается запустить Apache. Однако когда я вручную запускаю «sudo apachectl restart», все запускается.

2
задан 22 January 2021 в 18:43

4 ответа

Служба Apache обычно имеет окно 90 секунд для начала. Если он не может сделать это во время загрузки, Systemd будет убивать процесс и сообщать о нем как и время. В большинстве случаев Apache можно запустить (и перезапустить) в колодце под секунду, но он может застревать за зависимостью во время загрузки, если есть другой процесс, который требует дополнительного времени. Я видел это по случаю, когда сетевые интерфейсы зарабатывают немного больше, чем обычно, чтобы начать, или когда система ждет ответа от NTP-сервера для синхронизации внутренних часов.

Один из самых простых способов уменьшения частоты этой ошибки - увеличить значение времени ожидания услуг из 90 к чему-то немного выше, например 180 или 300 .

Вот как вы можете сделать это:

  1. SSH на сервер

  2. Откройте файл /lib/sistemd/system/apache2.service с sudo :

     sudo vi /lib/systemd/system/apache2.service
     

    Примечание: Если у вас нет файла в /lib/systemd/system/apache2.service , , то файл конфигурации будет в / lib / systemdd /system/apache2.service.d/apache2-systemd.conf.

  3. В разделе [Service] [Service] добавьте эту строку (нажмите I , чтобы вставить / редактировать):

     TimeoutStartsec = 300
     

    Не стесняйтесь установить TimeoutStArtsec значение для чего-то, с которым вам удобно, но держите его выше 90. В противном случае время ожидания загрузки будет продолжаться.

    После этого вы должны увидеть что-то вроде этого:

      [Сервис]
    Тип = Forking.
    Среда = apache_started_by_systemd = true
    Execstart = / usr / sbin / apachectl начать
    Execstop = / usr / sbin / apachectl Стоп
    Execreload = / usr / sbin / apachectl изящно
    Privatetmp = true.
    Перезапуск = на прервании
    TimeoutStartSec = 300.
     
  4. Сохраните файл ( esc , : : , w , q )

На данный момент вы можете перезагрузить Сервер и посмотреть, если Apache продолжает время от времени. Обратите внимание, что это не решает суть проблемы, которая является расширенным временем, необходимым для загрузки, но он должен включить Apache запускать после завершения всех процессов INIT.

Bonus Fix

Для устранения AH00558: Apache2: не может надежно определить полностью квалифицированное имя доменного имени сервера , вы можете установить по умолчанию для системы. Это не повлияет на производительность веб-сервера каким-либо образом:

  1. SSH на сервер (если он еще не подключен)

  2. Откройте файл /etc/apache2/apache2.conf с sudo :

     sudo vi /etc/apache2/apache2.conf
     
  3. В самом нижней части файла добавьте эту строку (нажмите I , чтобы вставить / редактировать):

     ServerName 127.0.0.1
     
  4. Сохранить файл ( ESC , : , w , Q )

  5. Проверьте файлы конфигурации Apache для ошибок:

     Sudo Apachectl Configtest
     

    Вы должны увидеть:

     Синтаксис ОК
     

Теперь вы можете перезапустить Apache с помощью Sudo Service Apache2 Restart или, если вы выполняете это после обновления значение TimeoutSecCEC , вы можете перезагрузить сервер.

1
ответ дан 18 March 2021 в 23:42

Чтобы включить сервис для начала загрузки на загрузке:

sudo systemctl enable <serviceName>
0
ответ дан 18 March 2021 в 23:42

Подобный вопрос был задан на нашем сестре Unix & Linux :

В этом ответе решение изменяли файл /etc/systemd/system.conf и Две линии:

#DefaultTimeoutStartSec=90s
#DefaultTimeoutStopSec=90s

На моей машине это 90 секунд, но на связанном ответе было 15 секунд, что было слишком коротким. Если вы говорите 15, а затем измените его на:

DefaultTimeoutStartSec=90s
DefaultTimeoutStopSec=90s

Примечание. Удаление # Включает линию от комментария к команде.

Также обратите внимание, что ваш LeanceCtl -xe не имеет ошибок, связанных с apache2? Возможно, вам нужно нажать страницу несколько раз. Кроме того, вы можете попробовать использовать JournctCtl -b-0 , а также с использованием страницы вниз .

0
ответ дан 18 March 2021 в 23:42

Вопрос прост и но жизненно важный.

Есть переменная среды выполнения Systemd SystemD Файл APACHE2 Устройство APACHE2 AKA "Apache2 Сервисный файл", т.е. /lib/systemd/system/apache2.service

Эта переменная $ apache_start_by_systemd . Он должен быть установлен, и он идет под раздел [Service] [Service] Systemd.exec или Конфигурация среды выполнения

Эта переменная может быть установлена ​​так:

Environment=APACHE_STARTED_BY_SYSTEMD=true

Эта переменная требуется для Apache начать и запустить правильно после интеграции Apache с SystemD с Apache версии 2.4.42, а затем . Он обеспечивает SystemD с возможностью обработки и отчетности / usr / sbin / apachectl и процесс Apache2 .

0
ответ дан 18 March 2021 в 23:42

Другие вопросы по тегам:

Похожие вопросы: