Я столкнулся с проблемой, когда включение драйвера 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
Я считаю, что важный посыл заключается в следующем:
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
(Кстати, strace
ing systemctl
не очень полезен, так как systemctl
не запускает сам сервис - он просто разговаривает с PID1 и приказывает ему что-то делать. Чтобы узнать, что делает Apache таким медленным, вы можете добавить strace
к ExecStart=
директива apache.service
.)