Linux 日志管理工具 | logrotate
logrotate 用来转储日志文件,分割压缩日志,删除旧的,创建新的
logrotate 一般系统会自带,不需要自己安装
logrotate 处理日志,依靠 cron 每天在执行时间自动执行
下面一段就描述了对 bootlog
的转储方式
# cat /etc/logrotate.d/bootlog
/var/log/boot.log
{
missingok # 没有日志时跳过
daily # 每天转储一次
copytruncate # 日志备份并截断
rotate 90 # 转储次数
notifempty # 日志为空时不处理
dateext # 用当前日期命名
}
配置文件
-
主配置是
/etc/logrotate.conf
,自动执行的日志转储都通过主配置文件引入。 -
默认引入的是
/etc/logrotate.d/
目录,通常都放在这里。 -
状态记录文件,
/var/lib/logrotate/logrotate.status
-
自动执行 logrotate,依赖
/etc/cron.daily/logrotate
-
主配置中定义了公用的配置,根据需求进行配置
-
轮询日志文件,每周一次。
weekly
-
转储保存日志数量。
rotate 4
-
转储旧日志后,创建一个新日志文件。
create
-
转储日志用当前日期命名。
dateext
-
压缩转储后的日志。
compress
-
-
自定义配置项后,会覆盖主配置的默认值
配置参数说明
-
compress
用 gzip 压缩转储后的日志 -
nocompress
不压缩转储文件 -
copytruncate
日志文件备份并截断,先备份再清空,中间时间差可能会丢失日志 -
nocopytruncate
备份日志文件但不截断 -
create <mode owner group>
指定新建文件属性(权限 用户 用户组) -
nocreate
不创建新文件 -
delaycompress
转储的文件到下一次才压缩 -
nodelaycompress
转储的同时压缩 -
missingok
日志不存在时跳过,继续下一个日志 -
errors <address>
转储的错误信息发送到指定邮箱 -
ifempty
日志为空时也进行转储 -
notifempty
日志为空时不转储 -
mail <address>
转储的日志文件发送到指定邮箱 -
nomail
转储时不发送日志文件 -
olddir <directory>
转储日志文件放到指定目录 -
noolddir
转储日志和当前日志放在同一目录 -
sharedscripts
执行 postrotate 脚本,所有日志转储后统一执行一次脚本 -
prerotate...endscript
转储前执行的脚本,需独立一行 -
postrotate...endscript
转储后执行脚本,需独立成行 -
daily
转储周期为每天一次 -
weekly
转储周期为每周一次 -
monthly
转储周期为每月一次 -
rotate <count>
转储文件保存个数, -
dateext
转储文件命名格式为当前日期 -
dateformat <.%m>
转储文件命名格式,结合 dateext 使用,有%Y、%m、%d、%s
四种格式 -
size <file size>
文件超过指定大小才会转储(如:100k、2M、5(byte)) -
minsize
作用同 size
默认运行时间
- 运行时间由 cron 配置
/etc/anacrontab
决定
# 随机延迟 45min
RANDOM_DELAY=45
# 有效时间为 3-22 点
START_HOURS_RANGE=3-22
# /etc/cron.daily 执行周期为 1 天,延迟时间为 5min
1 5 cron.daily nice run-parts /etc/cron.daily
-
没关机的情况下,会在每天 3:05 ~ 3:50 之间执行
-
有效时间内关机的情况下,会在开机 5min 后开始执行
logrotate 命令
logrotate [OPTION] <configfile>
-
-d, --debug
,debug 模式,测试文件是否有错 -
-f, --force
,强制转储 -
-v, --verbose
,显示转储过程 -
-m, --mail=commend
,压缩日志后发送到指定邮箱 -
-s, --state=statefile
,指定状态文件
手动转储
- 执行
/etc/logrotate.d/
下的配置文件
logrotate -f -v /etc/logrotate.d/bootlog
- 也可以执行其他目录自定义的配置文件,注意文件要有执行权限
logrotate -f -v /usr/batch/test
- 想要固定时间执行,则把任务放在 crontab 中
0 23 * * * logrotate -f -v /usr/batch/test
自定义时可以参考现有文件,并结合可用参数,实现需求内容。
/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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)