今天,我的apache实例被一些cron作业正常地自动重启,我猜,之后它没有运行。 apache错误日志文件显示:
[Fri Jun 03 06:25:04.379685 2016] [mpm_prefork:notice] [pid 8256] AH00171: Graceful restart requested, doing restart apache2: Syntax error on line 140 of /etc/apache2/apache2.conf: Syntax error on line 2 of /etc/apache2/mods-enabled/access_compat.load: Cannot load /usr/lib/apache2/modules/mod_access_compat.so into server: /usr/lib/apache2/modules/mod_access_compat.so: undefined symbol: ap_get_useragent_host
通过手动启动后
service apache2 start
它按预期工作。
我已经在这个Ubuntu 14.04机器上禁用了无人值守的安全更新,因为上周我在上面打印了类似的问题
[Thu May 26 06:27:29.737707 2016] [mpm_prefork:notice] [pid 1487] AH00171: Graceful restart requested, doing restart apache2: Syntax error on line 140 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/php5.load: Cannot load /usr/lib/apache2/modules/libphp5.so into server: /lib/x86_64-linux-gnu/libm.so.6: symbol __strtold_nan, version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
这是一种竞争条件? 为什么不能够加载模块一些?
UPDATE
错误中提到的行看起来像
LoadModule access_compat_module /usr/lib/apache2/modules/mod_access_compat.so
所以没有语法错误,我没有改变任何东西,让它再次运行,只需再次启动Apache。
托马斯,我很想知道你是否find了解决问题的办法。 这个bug今天早上影响了我。 讽刺的是,当Apache进行一次优雅的重新加载时,就会触发它。 然而,运行apache2重新启动服务器的工作没有问题。 我遇到的优雅重新加载是apache日志轮转脚本(/etc/logrotate.d/apache2)后处理的一部分。 优雅的重新加载在这里完成释放旧的日志文件,以便他们不再消耗磁盘空间。 我暂时在我的工作中修改这个使用重新启动而不是重新加载,从而避免了这个问题。
日志中的错误信息是指向mod_access_compat模块是问题,这是一个核心模块,我真的不能没有它。 所以我去研究和比较差异。 一旦我从2.4.16升级到2.4.20(和另一台服务器上的2.4.23),这个问题只会影响到我。 看起来2.4.19有一个变化,表明所有模块都使用ap_get_useragent_host而不是旧的ap_get_remote_host函数来获取访问者的远程IP。 我决定下载最新的源代码(2.4.23),并将mod_access_compat.c(第279行)中的这一行改回以前的版本:remotehost = ap_get_remote_host(r-> connection,r-> per_dir_config,REMOTE_DOUBLE_REV ,&remotehost_is_ip);
一旦我重新编译Apache,我复制新的mod_access_compat.so到我的模块文件夹,以取代发货。 我已经能够轻松地重新启动和重新装载了,没有任何问题。 虽然我还没有把这个更新转移到我的生产服务器上,但我会在几个小时之后。
这显然不是一个长期的解决scheme,但它解决了我的问题,直到Apache开发人员正确地解决它。 我正在运行Ubuntu 14.04。
你的里程可能有所不同,祝你好运!
更新我编译了我的发现,并向Apache开发者提交了一个错误报告。 他们build议服务器需要完全停止并启动,因为一些组件在升级后仍然在内存中。 我再次testing,优雅的重新加载工作正常 – 无需更换模块 – 在生产服务器上。 所以,显然这是在实际升级过程中一次性咬住你的bug,因为它应该停止/启动,而不是重新启动服务器。 对于任何可能遇到此问题的人, 只需停止服务器并重新启动。
这是我提交的错误报告(我希望它被标记为非错误): https : //bz.apache.org/bugzilla/show_bug.cgi?id = 59842