logrotate command in Linux

背景

在生产过程中,由于磁盘空间、保留周期等因素,会对系统、应用等日志提出要求,要求系统日志定期进行轮转、压缩和删除,从而减少开销,而系统自带的logrotate  则是一个简单又实用的小工具,下面着重介绍一下,满足日常需求。

语法

Usage: logrotate [OPTION...] <configfile>  

常用参数 :

-f 非设定周期内强制运行

-d 调试,对日志模拟进行操作

-v 可视化执行过程结果

其它参数不常用,详情见下:

[root@test01 ~]# logrotate --help 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  Help options:   -?, --help                Show this help message   --usage                   Display brief usage message [root@test01 ~]#

配置文件

logrotate  配置主要有两个

  • 常规主配置文件地址/etc/logrotate.conf 不建议对其修改
  • 自定义配置文件 /etc/logrotate.d 这里存放用户自定义文件,通常建议将个人文件放到这里
[root@test01 ~]# cd /etc/logrotate.d/ [root@test01 logrotate.d]# ll total 16 -rw-r--r--. 1 root root  91 Aug  6  2019 bootlog -rw-r--r--. 1 root root 224 Aug  6  2019 syslog -rw-r--r--. 1 root root 100 Oct 31  2018 wpa_supplicant -rw-r--r--. 1 root root 103 Aug  8  2019 yum [root@test01 logrotate.d]#

为保证 /etc/logrotate.d 定义的文件能够执行生效,需要确保 /etc/logrotate.conf 这句话没有注释,如有注释,需手动取消:

# RPM packages drop log rotation information into this directory include /etc/logrotate.d

配置文件demo及参数

以下是我个人一个配置文件,可以直接拿来结合自己需求进行修改:

/var/log/linuxserver/linux.log {         rotate 7         size 200M         daily         compress         delaycompress         missingok         notifempty         noolddir         copytruncate            dateext                           dateformat .%s         create 660 root root }

 文件格式主要是以日志路径和日志切割参数组成:

第一行:指明 需要进行切割的日志路径,可以结合正则表达式,例如 /path/*.log ,指定路径下所有的日志

第二行:以{ } 包含logrotate 所需要的参数,demo包含了基本常用到的几个参数,此外还有如下部分参数,参数含义如下:

# 日志压缩参数  compress                 通过gzip 压缩转储以后的日志 delaycompress            和compress 一起使用时,转储的日志文件到下一次转储时才压缩 nodelaycompress          覆盖 delaycompress 选项,转储同时压缩 nocompress               不做gzip压缩处理 # 对截断后的日志处理参数 copytruncate             用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。 nocopytruncate           备份日志文件不过不截断 create mode owner group  轮转时指定创建新文件的属性,如create 0777 nobody nobody nocreate                 不建立新的日志文件 dateext                  使用当期日期作为命名格式 dateformat .%s           配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数 # 基本参数 missingok                如果日志丢失,不报错继续滚动下一个日志 errors address           专储时的错误信息发送到指定的Email 地址 ifempty                  即使日志文件为空文件也做轮转,这个是logrotate的缺省选项。 notifempty               当日志文件为空时,不进行轮转 mail address             把转储的日志文件发送到指定的E-mail 地址 nomail                   转储时不发送日志文件 # 旧日志存放参数 olddir directory         转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 noolddir                 转储后的日志文件和当前日志文件放在同一个目录下 # logrotate 执行前后钩子参数 sharedscripts            运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本 prerotate                在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行 postrotate               在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行 # 执行周期参数 daily                    指定转储周期为每天 weekly                   指定转储周期为每周 monthly                  指定转储周期为每月 # logrotate 触发条件参数 rotate count             指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份 size(或minsize) log-size 当日志文件到达指定的大小M、G时才转储

执行触发时间

logrotate 默认走的是crond 服务 ,执行语句脚本存放在/etc/cron.daily/ 目录下,主要脚本:/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf

logrotate command in Linux

默认触发时间配置文件存在 /etc/anacrontab ,默认执行时间 每日3.45-22.45 时间段随机执行一次。缺点是具体执行时间不容易掌握,通常不建议用户对该文件进行修改,如果需要定期执行,建议用户可以在vim /etc/crontabcrontab  -e 按照crond 格式设定执行时间,以便更好的分配脚本执行时间,避免机器资源集中使用,减少机器负载。

logrotate command in Linux

发表评论

相关文章