在Linux中轮换Apache日志文件
我想自动轮换apache access_log和error_log文件。能用一个例子来解释如何做到这一点吗?
这可以使用 logrotate 实用程序来实现,如下所述。
将以下文件添加到 /etc/logrotate.d 目录。
# vi /etc/logrotate.d/apache
/usr/local/apache2/logs/access_log /usr/local/apache2/logs/error_log {
size 100M
compress
dateext
maxage 30
postrotate
/usr/bin/killall -HUP httpd
ls -ltr /usr/local/apache2/logs | mail -s "$HOSTNAME: Apache restarted and log files rotated" hgstcomcn@163.com
endscript
}
注意:请参阅我们的logrotate 教程(包含 15 个示例),其中解释了有关如何使用 logrotate 选项的更多详细信息。
在上面的 /etc/logrotate.d/apache 示例中:
- size 100M – 一旦 access_log 和 error_log 达到 100M,它将被轮换。您还可以使用 100k(用于 Kb)、100G(用于 GB)。除了大小,您还可以使用频率(每天、每周、每月)轮换 apache 日志。
- compress – 表示将压缩旋转的日志文件。默认情况下,它使用 gzip。因此,旋转后的文件将具有 .gz 扩展名。
- dateext – 将 YYYYMMDD 格式的日期附加到旋转的日志文件中。即创建access_log-20110616.gz,而不是access_log.1.gz
- maxage - 指示应保留轮换日志文件的时间。在此示例中,它将保留 30 天。
- postrotate 和 endscript – 包含在这两个参数之间的任何命令都将在日志旋转后执行。
重要提示:一旦轮换日志文件,您希望 apache 将新的日志消息写入新创建的 access_log 和 error_log。因此,您需要将 HUP 信号发送到 apache,如下所示。确保执行 /usr/bin/killall -HUP httpd,这将在轮换日志文件后重新启动 apache(阅读有关kill的更多信息)。
此外,您可能希望向自己发送一封电子邮件,表明日志文件已轮换,并将 ls -ltr 命令的输出作为电子邮件的正文。即在“postrotate”和“endscript”选项之间添加以下内容(在killall命令之后)。
ls -ltr /usr/local/apache2/logs | mail -s "$HOSTNAME: Apache 重新启动并旋转日志文件" ramesh@thegeekstuff.com
/etc/cron.daily/logrotate 脚本每天运行,将对 /etc/logrotate.conf 中指定的所有文件和 /etc/logrotate.d 目录下的所有文件执行日志轮换。
添加上述 /etc/logrotate.d/apache 文件后,为了测试目的,您可以手动调用 logrotate 脚本,如下所示。
# /etc/cron.daily/logrotate
轮换日志文件后,请执行 ls 来验证它们。正如我们上面解释的,轮换的日志文件将保留 30 天。
# ls /usr/local/apache2/logs
access_log
error_log
access_log-20110716.gz
error_log-20110716.gz
- 点赞
- 收藏
- 关注作者
评论(0)