Я использую 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», все запускается.
Служба Apache обычно имеет окно 90 секунд для начала. Если он не может сделать это во время загрузки, Systemd
будет убивать процесс и сообщать о нем как и время. В большинстве случаев Apache можно запустить (и перезапустить) в колодце под секунду, но он может застревать за зависимостью во время загрузки, если есть другой процесс, который требует дополнительного времени. Я видел это по случаю, когда сетевые интерфейсы зарабатывают немного больше, чем обычно, чтобы начать, или когда система ждет ответа от NTP-сервера для синхронизации внутренних часов.
Один из самых простых способов уменьшения частоты этой ошибки - увеличить значение времени ожидания услуг из 90
к чему-то немного выше, например 180
или 300
.
Вот как вы можете сделать это:
SSH на сервер
Откройте файл /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
.
В разделе [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.
Сохраните файл ( esc , : : , w , q )
На данный момент вы можете перезагрузить Сервер и посмотреть, если Apache продолжает время от времени. Обратите внимание, что это не решает суть проблемы, которая является расширенным временем, необходимым для загрузки, но он должен включить Apache запускать после завершения всех процессов INIT.
Для устранения AH00558: Apache2: не может надежно определить полностью квалифицированное имя доменного имени сервера
, вы можете установить по умолчанию для системы. Это не повлияет на производительность веб-сервера каким-либо образом:
SSH на сервер (если он еще не подключен)
Откройте файл /etc/apache2/apache2.conf
с sudo
:
sudo vi /etc/apache2/apache2.conf
В самом нижней части файла добавьте эту строку (нажмите I , чтобы вставить / редактировать):
ServerName 127.0.0.1
Сохранить файл ( ESC , : , w , Q )
Проверьте файлы конфигурации Apache для ошибок:
Sudo Apachectl Configtest
Вы должны увидеть:
Синтаксис ОК
Теперь вы можете перезапустить Apache с помощью Sudo Service Apache2 Restart
или, если вы выполняете это после обновления значение TimeoutSecCEC
, вы можете перезагрузить сервер.
Чтобы включить сервис для начала загрузки на загрузке:
sudo systemctl enable <serviceName>
Подобный вопрос был задан на нашем сестре Unix & Linux :
В этом ответе решение изменяли файл /etc/systemd/system.conf
и Две линии:
#DefaultTimeoutStartSec=90s
#DefaultTimeoutStopSec=90s
На моей машине это 90 секунд, но на связанном ответе было 15 секунд, что было слишком коротким. Если вы говорите 15, а затем измените его на:
DefaultTimeoutStartSec=90s
DefaultTimeoutStopSec=90s
Примечание. Удаление #
Включает линию от комментария к команде.
Также обратите внимание, что ваш LeanceCtl -xe
не имеет ошибок, связанных с apache2? Возможно, вам нужно нажать страницу несколько раз. Кроме того, вы можете попробовать использовать JournctCtl -b-0
, а также с использованием страницы вниз .
Вопрос прост и но жизненно важный.
Есть переменная среды выполнения 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
.