为什么 Apache 需要停止并启动(而不是重新启动)才能使新版本的 PHP 生效?

为什么 Apache 需要停止并启动(而不是重新启动)才能使新版本的 PHP 生效?

在 Ubuntu 18 上运行带有 mod_php 的 Apache 2.4。

每当我们获得 PHP 的软件包更新时,使用apachectl graceful或重新启动 Apacheapachectl restart都无法使新 PHP 版本生效。但是,apachectl stop随后apachectl start会重新加载正确版本的 PHP。

为什么是这样?

答案1

Apache 在启动时会加载 php 模块(以及许多其他模块)。-apachectl restart根据描述man apachectl- 只是向当前驻留在内存中的 Apache 进程发送 SIGHUP,告诉它杀死所有子进程(或者,在优美重新启动(即 SIGUSR1 而不是 SIGHUP,只需等待它们完成即可),然后重新开始,再次分叉子程序。它不会再次从磁盘重新加载程序二进制文件。

如果您停止 Apache 然后重新启动它,所有正在运行的进程将从内存中删除并再次从磁盘加载。

apachectl restartcommand 和service apache2 restartcommand(或 Apache 服务的名称,而不是)中“restart”的含义似乎存在语义上的不一致apache2。后者实际上会停止并启动服务,而apachectl restart相当于service apache2 reload。请注意“reload”而不是“restart”。

答案2

因为这会重新启动 Apache 服务器。您还需要执行

service php7.4-fpm restart

重新启动应用程序服务器(将 7.4(20.10 上的默认版本)更改为您的版本;它也可能是完全不同的服务;我以 FPM 为例)。

相关内容