Apache 无法以 systemd 启动

Apache 无法以 systemd 启动

我遇到一个问题,启用 MS SQL Server [1] 的 PHP 驱动程序会导致 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 错误日志中没有条目,因此未包含该条目。ApacheLogLevel设置为debug

日志文件:https://gist.github.com/jamesmontalvo3/50cfaa2b2cee966917fc96e3c6784887

由于上面的日志似乎没有显示任何有用的信息,我还运行了strace -ff -o /tmp/st2 -s 5000 systemctl start httpd。六个堆栈跟踪进程的输出可以在这里找到:https://gist.github.com/jamesmontalvo3/89f5e3897c1e2b71b68818215f220477。不过,我这里也没有看到任何错误。

我如何才能确定如何修复此问题,而没有任何有用的错误消息?还是我只是错过了什么?

我已将此问题发布在 PHP/MSSQL 驱动程序的 GitHub [2] 和 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

答案1

我认为最重要的信息是:

6月25日 11:47:56 服务器故障 systemd[1]: httpd.service 启动操作超时。终止。

默认情况下,systemd 会给服务 90 秒(DefaultTimeoutStartSecin system.conf)的时间来启动 – 如果启动时间超过此时间,服务将被终止(首先使用 SIGTERM,然后再过 90 秒使用 SIGKILL,明白了吗systemd.kill(5)– 这就是您所说的三分钟的来源)。据推测,启用 PHP/MSSQL 驱动程序会使 Apache 启动速度变慢,以至于需要超过 90 秒的时间。

尝试增加,例如甚至。您可以使用以下命令执行此操作TimeoutStartSecapache.serviceTimeoutStartSec=5minTimeoutStartSec=infinity

systemctl set-property apache.service TimeoutStartSec=5min

(顺便说一句,straceingsystemctl不是很有用,因为systemctl它不会自行启动服务 - 它只是与 PID1 对话并告诉它执行一些操作。要找出导致 Apache 如此缓慢的原因,您可以添加straceExecStart=的指令中apache.service。)

相关内容