昨晚 7 月 17 日晚上 7:57:18,Apache2 关闭并停止工作。直到今天(18 日)早些时候我才注意到。
已发生更新:/var/log/apt/history.log 显示执行了 3 项更新:
Start-Date: 2018-07-17 19:57:18
Commandline: apt-get -y install apache2 Install: libjansson4:amd64
(2.7-3, automatic) Upgrade: apache2-data:amd64 (2.4.33-
3.0+ubuntu16.04.1+deb.sury.org+1, 2.4.34-
1+ubuntu16.04.1+deb.sury.org+5), apache2-bin:amd64 (2.4.33-
3.0+ubuntu16.04.1+deb.sury.org+1, 2.4.34
1+ubuntu16.04.1+deb.sury.org+5), apache2:amd64 (2.4.33
3.0+ubuntu16.04.1+deb.sury.org$ End-Date: 2018-07-17 19:57:23
Start-Date: 2018-07-17 19:57:37
Commandline: apt-get -y install apache2-doc
Upgrade: apache2-doc:amd64 (2.4.33-3.0+ubuntu16.04.1+deb.sury.org+1,
2.4.34-1+ubuntu16.04.1+deb.sury.org+5)
End-Date: 2018-07-17 19:57:39
Start-Date: 2018-07-17 19:57:43
Commandline: apt-get -y install apache2-suexec-custom
Upgrade: apache2-suexec-custom:amd64 (2.4.33-
3.0+ubuntu16.04.1+deb.sury.org+1, 2.4.34-
1+ubuntu16.04.1+deb.sury.org+5)
End-Date: 2018-07-17 19:57:44
输入时:/etc/init.d/apache2 启动
我得到: Job for apache2.service failed because the control process exited with error code. See "systemctl status apache2.service" and "journalctl -xe" for details. failed!
systemctl 状态 apache2.service产量:
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled;
vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2018-07-18 15:01:46
MST; 3min 50s ago
Process: 8835 ExecStop=/usr/sbin/apachectl stop (code=exited,
status=0/SUCCESS)
Process: 21710 ExecStart=/usr/sbin/apachectl start (code=exited,
status=1/FAILURE)
Main PID: 8832 (code=exited, status=1/FAILURE)
journalctl-xe给了我这个:
Jul 18 15:20:04 ns1.[masked].com apachectl[23823]: apache2: Syntax
error on line 146 of /etc/apache2/apache2.conf: Syntax error on line
2 of /etc/apache2/mods-enabled/lbmethod_byrequests.load:
/etc/apache2/apache2.conf 第 146 行内容如下:
DefaultRuntimeDir ${APACHE_RUN_DIR}
以及 /etc/apache2/mods-enabled/lbmethod_byrequests.load 第 2 行:
LoadModule lbmethod_byrequests_module /usr/lib/apache2/modules/mod_lbmethod_byrequests.so
到现在为止,我完全不知所措了。第 146 行只是引用了 .load 文件,而该文件指向了存在的文件的路径……所以我不知道 lbmethod_byrequests.load 第 2 行的语法错误是什么。
更新至 2.4.34 后,还有其他人遇到 Apache 问题吗?
答案1
您遗漏了部分错误。完整错误如下:
apache2: Syntax error on line 146 of /etc/apache2/apache2.conf: Syntax error
on line 2 of /etc/apache2/mods-enabled/lbmethod_byrequests.load: Cannot load
/usr/lib/apache2/modules/mod_lbmethod_byrequests.so into server:
/usr/lib/apache2/modules/mod_lbmethod_byrequests.so: undefined symbol:
ap_proxy_balancer_get_best_worker
这似乎是由模块加载顺序引起的。lbmethod_byrequests依赖于取决于代理人但lbmethod_byrequests首先加载,导致未定义的符号错误,代理人如果它被加载将会提供。
如果您mv /etc/apache2/mods-enabled/lbmethod_byrequests.load /etc/apache2/mods-enabled/zzlbmethod_byrequests.load
,Apache 可以正常启动。不幸的是,我不知道为什么现在会发生这种情况,而以前没有发生过。
答案2
在类似的情况下,我必须更改 proxy.conf 中的模块加载顺序:
我正在运行 alpine apache2-proxy 包。它失败了,并显示:
cannot load modules/mod_lbmethod_bybusyness.so into server:
Error relocating /var/www/modules/mod_lbmethod_bybusyness.so:
ap_proxy_balancer_get_best_worker: symbol not found
那些家伙这里我们正在讨论一个错误已修复,但加载顺序仍然存在问题。我不太清楚细节,但在我的例子中,代理配置位于不同的地方:
etc/apache2/conf.d/proxy.conf
在这里我确保 mod_proxy.so 在 mod_lbmethod_byrequests 之前列出。问题解决了。只花了我半天时间。
答案3
以下命令对我有用。之前我使用的是 php7.4,但在 ubuntu 升级后,安装了最新版本 8.1
sudo a2dismod php7.4
sudo a2enmod php8.1
sudo systemctl restart apache2
如果有人仍想使用 PHP 7 或更旧的版本,请在 ubuntu 升级后使用以下命令。
# PHP version that needs to be disabled
sudo a2dismod php8.1
# PHP version that needs to be enabled
sudo a2enmod php7.4
sudo systemctl restart apache2
希望它对某些人有帮助。