当前位置: 首页 > 工具软件 > logrotate > 使用案例 >

logrotate日志轮转

柴赞
2023-12-01

logrotate日志轮转

logrotate程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用。

1.配置文件

/etc/logrotate.conf 默认配置文件
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
/etc/logrotate.d/ 此目录下可以自定义配置文件
其他重要参数
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 记录上一次执行状态

2.logrotate命令格式

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

3.logrotate与crontab结合案例

每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-590-231-311-120-7执行的命令

0和7都代表周天

特殊字符含义
*代表任何时刻
代表分隔时段
·代表一段时间范围
/数字指定时间的间隔频率,例如每3分钟进行一次,*/3
[root@localhost logrotate.d]# cat test
'/test/*.log'{
    create 0664 root root
    size 2M
    rotate 3
    missingok
    notifempty
    compress
}
 类似资料: