我无法重新启动 apache2 服务。我执行此命令apache2ctl configtest
并显示以下错误:
apache2: Syntax error on line 146 of /etc/apache2/apache2.conf: Syntax error on line 2 of /etc/apache2/mods-enabled/php7.0.load: Cannot load /usr/lib/apache2/modules/libphp7.0.so into server: /usr/lib/apache2/modules/libphp7.0.so: cannot open shared object file: No such file or directory
Action 'configtest' failed.
The Apache error log may have more information.
当我执行 apache2 服务启动命令时,它显示以下错误:
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: failed (Result: exit-code) since Sat 2018-10-27 21:39:15 IST; 14s ago
Process: 24290 ExecStart=/usr/sbin/apachectl start (code=exited, status=1/FAILURE)
Main PID: 19188 (code=exited, status=0/SUCCESS)
Oct 27 21:39:15 abc systemd[1]: Starting The Apache HTTP Server...
Oct 27 21:39:15 abc apachectl[24290]: apache2: Syntax error on line 146 of /etc/apache2/apache2.conf: Syntax error
Oct 27 21:39:15 abc apachectl[24290]: Action 'start' failed.
Oct 27 21:39:15 abc apachectl[24290]: The Apache error log may have more information.
Oct 27 21:39:15 abc systemd[1]: apache2.service: Control process exited, code=exited status=1
Oct 27 21:39:15 abc systemd[1]: apache2.service: Failed with result 'exit-code'.
Oct 27 21:39:15 abc systemd[1]: Failed to start The Apache HTTP Server.
如何解决此错误并成功运行apache2?
请帮我。
谢谢。
答案1
就我而言,这是由于 PHP 升级但配置过时而发生的。
尝试以下命令(下面显示的示例适用于 PHP 版本 7.0 和 7.2,请将版本替换为您自己的版本):
a2dismod php7.0
mv /etc/apache2/mods-available/php7.0.conf /etc/apache2/mods-available/php7.2.conf
mv /etc/apache2/mods-available/php7.0.load /etc/apache2/mods-available/php7.2.load
使用文本编辑器编辑/etc/apache2/mods-enabled/php7.2.load
并使用 php7.2 更改内容。请检查您的 PHP 版本并正确替换。移动命令并不重要,但最好与版本名称同步。
然后启用 mod 并重新加载 apache。
a2enmod php7.2
service apache2 start
答案2
抱歉,我之前没有询问具体细节,但请对此发表评论,我可以尝试更新这个答案,使其更具体。
这个错误很容易解释。Apache 有一个用于加载附加到服务的模块的结构。在 Ubuntu 上,每个模块都有 3 个重要文件。让我们看看 mpm_prefork 模块,您可能应该已经拥有它。在 /etc/apache2/mods-enabled/ 中,您将找到一个 mpm_prefork.load 和一个 mpm_prefork.conf 文件。
使用 vi 或 nano 读取这些内容,例如nano /etc/apache2/mods-enabled/mpm_prefork.load
在这里,您会看到它正在寻找一个名为的配套二进制文件/usr/lib/apache2/modules/mod_mpm_prefork.so
。请注意路径与您收到的错误有何相似之处?
因此,就您而言,您似乎有一个 php7.0.load 文件正在寻找。您应该通过列出该目录并查看它在那里吗?/usr/lib/apache2/modules/libphp7.0.so
来查看该文件是否确实存在。ls /usr/lib/apache2/modules/
如果没有,那么我建议尝试重新安装 php,这不是最糟糕的主意,因为 php7.0 很快就会被弃用(确切地说是 2018 年 12 月 3 日)。
因此运行以下命令:
dpkg --get-selections | grep php* # list all php packages installed
sudo apt remove php7.0 # but replace php7.0 with whatever you installed
sudo apt update
sudo apt install php libapache2-mod-php