跳到主要内容

Logrotate

·185 字·1 分钟

在 Linux 系统中存在各种日志文件,例如保存启动信息和内核信息的 /var/log/dmesg ,保存系统日志的 /var/log/syslog 等。如果连续运行时间太长,这些日志会越来越大,最终占据太多系统空间。所以,我们需要定期清理系统日志。Logrotate 的主要功能就是定时将旧的日志文件归档,同时创建一个新的空的日志文件,归档的文件可以选择压缩或者发送到指定的邮箱,这个过程叫做轮替(rotate):

Logrotate 是基于 cron 运行的,他的脚本是 /etc/cron.daily/logrotate :

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

cron 用于设置周期性被执行的指令,是运行在后台的守护进程。

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

# 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.

其中,以 # 开头的都是注释。include /etc/logrotate.d 之前的是默认配置,全局有效。之后以花括号包围的是针对单个文件的配置,这里的配置项会覆盖默认配置。配置项的含义:

  • weekly 表示每周对日志文件进行一次轮替,类似的可选项还有 monthly (每月一次,通常是每月的第一天),daily(每天一次) 。
  • rotate 4 表示保留最近四次的归档,之前的全部清除。
  • create 表示轮替后立即创建新的空的日志文件,它可以带三个参数:mode owner group ,分别表示新文件的权限、所有者和用户组,例如 create 0600 root utmp。
  • dateext 表示为归档后的文件名添加日期信息,日期的格式由 dateformat 选项设置。
  • compress 表示压缩归档文件,注释掉这个配置项就表示不压缩。

另外,在 /etc/logrotate.d/ 目录下的配置文件会被读入到 /etc/logrotate.d ,我们自行添加的配置文件都可以放在这里。