Apache 每天都崩溃

Apache 每天都崩溃

我有一个干净的 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 的更多信息)

您可以尝试一下这些,看看哪一个适合您。

相关内容