Решение проблемы перезапуска Apache/httpd на CentOS 7

просмотров: 17595 ноября 2016 года

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

Немного покопав, я выяснил, что сервер падал таки по расписанию, а именно - в cron.dialy выполялись некоторые обновления настроек, после чего он должен был удачно перезагружаться...
Как можно догадаться, никаких "удачно" не происходило.

Сервер вылетал с ошибкой:

HOST_NAME /var/log[0]# systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/httpd.service.d
           └─nofile.conf
   Active: failed (Result: exit-code) since Sat 2016-11-05 21:58:01 EET; 22s ago
  Process: 4419 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
  Process: 4417 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
 Main PID: 4417 (code=exited, status=1/FAILURE)

Nov 05 21:58:01 HOST_NAME systemd[1]: Starting The Apache HTTP Server...
Nov 05 21:58:01 HOST_NAME httpd[4417]: [Sat Nov 05 21:58:01.608778 2016] [alias:warn] [pid 4417] AH00671: The Alias directive in /etc/httpd/conf.d/autoindex.conf at line 21 will probably never match because it overlaps an earlier Alias.
Nov 05 21:58:01 HOST_NAME httpd[4417]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 12.34.56.78. Set the 'ServerName' directive globally to suppress this message
Nov 05 21:58:01 HOST_NAME systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Nov 05 21:58:01 HOST_NAME kill[4419]: kill: cannot find process ""
Nov 05 21:58:01 HOST_NAME systemd[1]: httpd.service: control process exited, code=exited status=1
Nov 05 21:58:01 HOST_NAME systemd[1]: Failed to start The Apache HTTP Server.
Nov 05 21:58:01 HOST_NAME systemd[1]: Unit httpd.service entered failed state.
Nov 05 21:58:01 HOST_NAME systemd[1]: httpd.service failed.

Что ж, не буду лукавить, помог мне в очередной раз Гугл...)) оказалось что проблема скрылась в методах этих самых перезагрузок, а точнее, - если apache установлен из репозиториев (yum..) то в файле /usr/lib/systemd/system/httpd.service, скорее записано следующее:

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

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
# We want systemd to give httpd some time to finish gracefully, but still want
# it to kill httpd after TimeoutStopSec if something went wrong during the
# graceful stop. Normally, Systemd sends SIGTERM signal right after the
# ExecStop, which would kill httpd. We are sending useless SIGCONT here to give
# httpd time to finish.
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

 

Как подсказало сообщество apachelounge.com, такая запись не корректна или - это баг.

Следует в файл прописать следующее:

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

[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -k start
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/usr/sbin/httpd $OPTIONS -k graceful-stop
PrivateTmp=true
# If you have 90 seconds reload problem - uncomment several lines below (mixed - worked for me)
#LimitNOFILE=infinity
#KillMode=mixed
#KillMode=none
#TimeoutStopSec=10 [Install] WantedBy=multi-user.target

Для перезагрузки модуля systemctl введите комманду:

systemctl daemon-reload

 

Источники

Что скажем?