在 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 restart
command 和service apache2 restart
command(或 Apache 服务的名称,而不是)中“restart”的含义似乎存在语义上的不一致apache2
。后者实际上会停止并启动服务,而apachectl restart
相当于service apache2 reload
。请注意“reload”而不是“restart”。
答案2
因为这会重新启动 Apache 服务器。您还需要执行
service php7.4-fpm restart
重新启动应用程序服务器(将 7.4(20.10 上的默认版本)更改为您的版本;它也可能是完全不同的服务;我以 FPM 为例)。