![Apache 每天都崩溃](https://linux22.com/image/725526/Apache%20%E6%AF%8F%E5%A4%A9%E9%83%BD%E5%B4%A9%E6%BA%83.png)
我有一个干净的 Debian 服务器,只有 apache,我有一个没有特殊选项的基本站点。一切都运行良好,但每天在同一时间,Apache 都会崩溃并且无法启动,我必须停止该站点并手动启动 apache。来自 /var/log/syslog 的日志:
8 月 8 日 06:25:01 localhost CRON[8096]: (root) CMD (test -x /usr/sbin/anacron || (cd / && run-parts --report /etc/cron.daily ))
8 月 8 日 06:25:17 localhost systemd[1]: 正在重新加载 LSB: Apache2 网络服务器。
8 月 8 日 06:25:18 localhost apache2[8220]: 正在重新加载 Web 服务器:apache2。
8 月 8 日 06:25:18 localhost systemd[1]: 重新加载 LSB: Apache2 网络服务器。
8 月 8 日 06:25:18 localhost apache2[8237]: 停止 Web 服务器:apache2。
8 月 8 日 06:25:18 localhost rsyslogd: [origin software="rsyslogd" swVersion="8.4.2" x-pid="550" x-info="http://www.rsyslog.com"] rsyslogd 已 HUP
来自 /var/log/apache/error.log 的日志:
[2018 年 8 月 8 日星期三 06:25:18.467344] [mpm_event:notice] [pid 7493:tid 139910286395264] AH00493:收到 SIGUSR1。执行正常重启 AH00558:apache2:无法可靠地确定服务器的完全限定域名,使用 127.0.0.1。全局设置“ServerName”指令以隐藏此消息
[2018 年 8 月 8 日星期三 06:25:18.521093] [core:crit] [pid 7493:tid 139910286395264] (22)参数无效:AH00069:make_sock:对于地址 [::]:80,apr_socket_opt_set:(IPV6_V6ONLY) (98)地址已在使用中:AH00072:make_sock:无法绑定到地址 0.0.0.0:80 [2018 年 8 月 8 日星期三 06:25:18.521141]
[mpm_event:alert] [pid 7493:tid 139910286395264] 没有可用的监听套接字,正在关闭
[2018 年 8 月 8 日星期三 06:25:18.521149] [:emerg] [pid 7493:tid 139910286395264] AH00019:无法打开日志,退出
答案1
根据时间和日志消息,我怀疑原因是 logrotate。
您的系统上会有一个名为 /etc/logrotate.d/apache2 的文件,它配置了与您的 apache 网络服务器相关的 logrotate 行为。
rsyslog 版本 8.4.2 表示您正在使用 Debian Jessie。以下是在我的 Jessie 系统上显示的内容:
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if /etc/init.d/apache2 status > /dev/null ; then \
/etc/init.d/apache2 reload > /dev/null; \
fi;
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
}
这里最有趣的部分是 postrotate。它使用 reload 选项调用 apache2 init 脚本。
这样做的目的是让 apache 释放日志文件的文件句柄,以便在旧文件移走后,它将开始记录到新文件中。
如果我是你,我会在维护窗口期间手动运行 postrotate 操作(大概是相同的 apache 重新加载),看看它是否也会导致 apache 崩溃。
如果确实如此,您将需要找出它崩溃的原因,或只是找到替代的后旋转操作。
Apache2 的一些合理的后旋转选项是/usr/sbin/apachectl graceful
或/usr/sbin/apachectl restart
。
我也非常喜欢 copytruncate,而不是使用 postrotate 操作。请参阅男人8日志旋转有关 copytruncate 的更多信息)
您可以尝试一下这些,看看哪一个适合您。