Назад | Перейти на главную страницу

Apache не запускается с systemd

Я столкнулся с проблемой, когда включение драйвера PHP для MS SQL Server [1] приводит к тому, что Apache httpd истекает через три минуты при запуске с systemd (systemctl start httpd). Apache работает нормально, если запускается напрямую (httpd -X). Ошибка systemctl:

Не удалось выполнить задание httpd.service, поскольку в процесс управления был доставлен критический сигнал. См. "Systemctl status httpd.service" и "journalctl -xe" для подробностей.

Если я отключу драйвер PHP / MSSQL, проблема исчезнет.

Это RedHat 7.5, а SELinux находится в «разрешающем» режиме.

Ссылка ниже содержит соответствующие файлы журналов запуска echo $(date) && systemctl restart httpd. Дата повторения была Mon Jun 25 11:46:25 CDT 2018, поэтому журналы начинаются с этого момента. Расчетное время сбоя - 11:49:25, так как время ожидания истекло через 3 минуты после запуска. restart httpd. Обратите внимание, что в журнале ошибок PHP не было записей, поэтому он не включен. Apache LogLevel установлен в debug.

Лог-файлы: https://gist.github.com/jamesmontalvo3/50cfaa2b2cee966917fc96e3c6784887

Поскольку приведенные выше журналы не показывают ничего полезного, я также запустил strace -ff -o /tmp/st2 -s 5000 systemctl start httpd. Выходные данные шести процессов с трассировкой стека можно найти здесь: https://gist.github.com/jamesmontalvo3/89f5e3897c1e2b71b68818215f220477. Однако здесь я тоже не вижу ошибок.

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

Я разместил эту проблему на GitHub [2] драйвера PHP / MSSQL и в списке рассылки Apache [3].

Ссылки:

[1] https://github.com/Microsoft/msphpsql

[2] https://github.com/Microsoft/msphpsql/issues/805

[3] http://mail-archives.apache.org/mod_mbox/httpd-users/201807.mbox/%3CCANkjp2rF2beFWWaEpLSouCOc+txzdGh0rihLYz4s4-uWQmOoOg@mail.gmail.com%3E

Я считаю, что важный посыл заключается в следующем:

25 июня, 11:47:56 сбой сервера systemd [1]: время запуска httpd.service истекло. Завершение.

По умолчанию systemd предоставляет службе 90 секунд (DefaultTimeoutStartSec в system.conf) для запуска - если это займет больше времени, служба будет убита (сначала с помощью SIGTERM, затем еще через 90 секунд с помощью SIGKILL, см. systemd.kill(5) - вот откуда у вас три минуты). Предположительно, включение драйвера PHP / MSSQL делает запуск Apache достаточно медленным, и это занимает более 90 секунд.

Попробуйте увеличить TimeoutStartSec из apache.service, е. грамм. TimeoutStartSec=5min или даже TimeoutStartSec=infinity. Вы можете сделать это с помощью следующей команды:

systemctl set-property apache.service TimeoutStartSec=5min

(Кстати, straceing systemctl не очень полезен, так как systemctl не запускает сам сервис - он просто разговаривает с PID1 и приказывает ему что-то делать. Чтобы узнать, что делает Apache таким медленным, вы можете добавить strace к ExecStart= директива apache.service.)