logrotate程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用。
weekly #默认每一周执行一次轮转
rotate 4 #默认保留四个日志文件
create #创建新的日志文件,保留和原来文件相同的权限
dateext #切割后的日志文件以当前日期为格式结尾,没有这行切割出来就是按数字递增
compress #是否通过gzip压缩转储以后的日志文件,不需要就注释
include /etc/logrotate.d #将/etc/logrotate.d/目录中的所有文件都加载进来
------------------------------------------------------------------------------------------------------------
/var/log/wtmp {
monthly #每月轮转一次
create 0664 root utmp #指定新建日志文件权限和所属用户及组
minsize 1M #文件大小超过1M就轮转
rotate 1 #只保留一个日志
}
对/var/log/wtmp设定的参数,wtmp记录用户登录系统及系统重启时间
------------------------------------------------------------------------------------------------------------
/var/log/btmp {
missingok #如果日志丢失,不报错继续滚动下一个日志
monthly
create 0600 root utmp
rotate 1
}
对/var/log/btmp设定的参数,btmp记录登录失败的用户时间及远程ip
compress 通过gzip 压缩转储以后的日志
nocompress 不做gzip压缩处理
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
nocopytruncate 备份日志文件,不截断
create mode owner group 轮转时指定创建新文件的属性,如create 0777 nobody nobody
nocreate 不建立新的日志文件
delaycompress 和compress一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖delaycompress选项,转储同时压缩
missingok 如果日志丢失,不报错继续滚动下一个日志
errors address 专储时的错误信息发送到指定的Email 地址
ifempty 即使日志文件为空文件也做轮转,这个是logrotate的缺省选项
notifempty 当日志文件为空时,不进行轮转
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate 在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行
postrotate 在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行
sharedscripts 运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份
maxage 当日志存档达到指定日期时,它将被删除
dateext 使用当期日期作为命名格式
dateformat .%s 配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数
size(或minsize) log-size 当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)
或MB(sizem).
当日志文件 >= log-size 的时候就转储。以下为合法格式:
size = 5 或 size 5 (>= 5 个字节就转储)
size = 100k 或 size 100k
size = 100M 或 size 100M
logrotate是基于cron运行的,脚本是/etc/cron.daily/logrotate,日志轮转是系统自动完成的
[root@localhost ~]# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
/var/lib/logrotate/logrotate.status 记录上一次执行状态
Usage: logrotate [OPTION...] <configfile>
-d, --debug Don't do anything, just test (implies -v)
-f, --force Force file rotation
-m, --mail=command Command to send mail (instead of `/bin/mail')
-s, --state=statefile Path of state file
-v, --verbose Display messages during rotation
-l, --log=STRING Log file
--version Display version information
每10分钟轮转/test/下的日志文件,当日志文件大小达到2M时进行轮转,最多保留3个
[root@localhost ~]# mkdir /test
[root@localhost ~]# head -c 2M < /dev/urandom >/test/test.log
[root@localhost ~]# crontab -l
*/10 * * * * /usr/sbin/logrotate /etc/logrotate.d/test
crontab -e
代表意义 | 分钟 | 小时 | 日期 | 月份 | 周 | 命令 |
---|---|---|---|---|---|---|
数字范围 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 | 执行的命令 |
0和7都代表周天
特殊字符 | 含义 |
---|---|
* | 代表任何时刻 |
, | 代表分隔时段 |
· | 代表一段时间范围 |
/数字 | 指定时间的间隔频率,例如每3分钟进行一次,*/3 |
[root@localhost logrotate.d]# cat test
'/test/*.log'{
create 0664 root root
size 2M
rotate 3
missingok
notifempty
compress
}