如何轮换(转储)日志文件?

时间:2020-01-09 14:16:43  来源:igfitidea点击:

问题描述:如何在Linux操作系统下轮换日志文件?

解决方法:您需要使用名为logrotate的工具,该工具旨在简化对生成大量日志文件的系统的管理。
它允许自动转储,压缩,删除和邮寄日志文件。

每个日志文件都可以每天,每周,每月或当它变得太大时进行处理。
使用此工具,可以使日志保留更长时间,磁盘空间更少。

默认配置文件

缺省配置文件是/etc/logrotate.conf:

# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}

服务或服务器特定的配置存储在/etc/logrotate.d目录中,例如,以下是示例Apache logrotate配置文件:

# cat /etc/logrotate.d/httpd

输出:

/var/log/httpd/*.log {
weekly
rotate 52
compress
  missingok
  notifempty
  sharedscripts
  postrotate
      /bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true    endscript
}

其中:

  • weekly:如果当前工作日少于最后一次轮换的工作日,或者自上次轮换以来已经过去了一周,则日志文件轮换。
  • rotate 52:日志文件已旋转52次,然后再删除或邮寄到mail指令中指定的地址。如果count为0,则删除旧版本,而不是旋转旧版本。
  • compress:使用gzip压缩旧版本的日志文件以节省磁盘空间。
  • missingok:如果缺少日志文件,请继续执行下一个而不发出错误消息。
  • notifempty:如果日志为空,请勿旋转
  • sharedscripts:通常,对每个循环的日志运行prerotate和postrotate脚本,这意味着对于与多个文件匹配的日志文件条目,单个脚本可以运行多次。如果指定了sharedscript,则无论有多少个日志与通配符模式匹配,脚本都只会运行一次。但是,如果该模式中的所有日志都不需要轮换,则这些脚本将完全不会运行。
  • postrotate/bin/kill -HUPcat /var/run/httpd.pid 2>/dev/null 2>/dev/null || true endscript:在转储日志文件后执行postrotate和endscript之间的行(两者都必须自己显示在行上)。这些指令只能出现在日志文件定义中。