每日一个Linux命令解析——logrotate
logrotate 是 Linux 下用于管理日志文件的工具,它可以根据指定的策略定期轮转、压缩、删除或邮件发送日志文件。
一、语法
logrotate [OPTION...] <configfile>
二、选项
-d, --debug 不执行任何操作,只测试并打印调试信息
-f, --force 强制进行日志轮转
-m, --mail=command 用指定的命令发送邮件(替代 `/usr/bin/mail`)
-s, --state=statefile 指定状态文件的路径
--skip-state-lock 不锁定状态文件
-v, --verbose 在轮转期间显示消息
-l, --log=logfile 指定日志文件路径或使用 'syslog' 来记录到系统日志
--version 显示版本信息
帮助选项:
-?, --help 显示此帮助信息
--usage 显示简要的使用信息
三、基本配置结构及解析
- 结构
/var/log/example.log {
daily # 日志轮转频率,可以是 daily, weekly, monthly 等
rotate 7 # 保留 7 个轮转的日志文件
compress # 压缩老的日志文件,通常为 `.gz` 格式
delaycompress # 延迟压缩,轮转后一个周期再压缩
missingok # 忽略日志文件缺失的情况,不报错
notifempty # 如果日志为空,则不进行轮转
create 0640 root adm # 创建新的日志文件,权限为 0640,所有者为 root,所属组为 adm
postrotate # 轮转日志之后执行的命令
systemctl reload example.service > /dev/null 2>/dev/null || true
endscript
}
- 解析:
四、命令行使用
logrotate -d /etc/logrotate.conf # 测试 logrotate 配置,不执行任何操作
logrotate -f /etc/logrotate.conf # 强制执行日志轮转
logrotate -v /etc/logrotate.conf # 显示详细输出
五、示例
- nginx日志文件配置,这段配置每天轮转一次 Nginx 日志,保留 14 天的日志,旧日志会在轮转后的第二天压缩。
/var/log/nginx/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}

六、总结
logrotate命令 用于对系统日志进行轮转、压缩和删除,也可以将日志发送到指定邮箱。使用 logrotate指令,可让你轻松管理系统所产生的记录文件。每个记录文件都可被设置成每日,每周或每 月处理,也能在文件太大时立即处理。您必须自行编辑,指定配置文件,自定义预设的配置文件存放 在 /etc/logrotate.d文件夹下。