应用工具二:应用 logrotate 管理日志文件

  你可能想保留日志文件一段时间,而不是删除或截断这些文件,以防万一需要时进行参考。通过轮换、压缩、发邮件以及删除指定的每个文件,logrotate 实用工具可以自动管理系统日志(和其它)文件。logrotate 实用程序由 /etc/logrotate.conf 文件控制,该文件用于设置默认值,可以指定要轮换的文件。通常情况下,logrotate.conf 包含一个 include 语句,指向实用程序指定的 /etc/logrotate.d 中的规范文件。以下是默认的 logrotate.conf 文件:
$ cat /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 
 
# use date as a suffix of the rotated file 
dateext 
 
# 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 and btmp -- we'll rotate them here 
/var/log/wtmp { 
monthly 
create 0664 root utmp 
minsize 1M 
rotate 1 

 
/var/log/btmp { 
missingok 
monthly 
create 0600 root utmp 
rotate 1 

 
# system-specific logs may be also be configured here.

  logrotate.conf 文件为常用的参数设置默认值。每当 logro-tate 读取这些参数的另一个值时,则会重置默认值。可以选择 daily(每天)、weekly(每周)或 monthly(每月)轮换文件。rotate关键字后面的数字指定要保留的被轮换日志文件数量。create 关键字会使 logrotate 创建一个新的日志文件,并与新轮换的日志文件具有相同的名称和属性。dateext 关键字导致 logrotate 使用日期作为文件扩展名。compress 关键字(默认文件中被注释掉)导致日志文件由 gzip 压缩。include 关键字为具体程序的 logrotate 规范文件指定标准 /etc/logrotate.d 目录。当使用 rpm 或基于 rpm 的实用程序安装一个程序时,rpm 把 logrotate 规范文件放在该目录中。

  logrotate.conf 中的后指令集会处理 /var/log/wtmp 和 /var/log/btmp 日志文件(wtmp 保存登录记录,而 btmp 保存失败的登录尝试记录);可以查看这些使用 who 的文件。missingok 关键字只覆盖这个文件的隐含默认值 nomissingok,此关键字导致 logrotate 继续运行,即使日志文件丢失也不会发出错误消息。关键字 monthly 只覆盖这个文件的默认值 weekly。create 关键字后面紧跟为新文件建立权限、所有者和组的参数。后的 rotate则建立应保留的轮换日志文件。

  /etc/logrotate.d/httpd 文件是实用程序 logrotate 规格文件的一个例子:
$ cat /etc/logrotate.d/httpd 
/var/log/httpd/*log { 
missingok 
notifempty 
sharedscripts 
delaycompress 
postrotate 
/sbin/service httpd reload > /dev/null 2>/dev/null || true 
endscript 
}

  这个文件由 httpd 软件包安装脚本安装,通过 logrotate.conf 中的 include 语句放入 /etc/logrotate.d 中,并使用 /var/log/httpd 中文件名以 log (*log) 结尾的每个文件。如果日志文件是空的,notifempty 关键字导致 logrotate 不轮换日志文件,而是重写空的日志文件。sharedscripts 关键字导致 logrotate 仅执行一次 prerotate 和 postrotate 节的命令,而不是为每个轮换的日志文件执行一次。delaycompress 关键字会导致 logrotate 延迟一个周期压缩。copytruncate 关键字没有出现在这个例子中,它会导致 logrotate 复制后立即截断原来的日志文件,这个关键字对于无法关闭并重新打开日志文件的程序非常有用,因为这些程序可能会在原始文件已被移动的情况下,继续写入原始文件。在轮换开始前,logrotate 实用工具会执行 prerotate 和 endscript 之间的命令。同样,轮换完成后,会执行 postrotate 和 endscript 之间的命令。

  logrotate 实用工具使用很多关键字,其中许多带有参数,而且有其它作用。详细信息请参阅 logrotate 手册页。