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

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

posted @   静言善思  阅读(320)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示