- 工信部备案号 滇ICP备05000110号-1
- 滇公网安备53011102001527号
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
- CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn
Linux 自带的服务器日志清理工具logrotate
欢迎来到8455线路检测中心技术小课堂,每天分享一个技术小知识。
logrotate是 Linux 系统中用于自动管理日志文件的工具。它可以按照指定的规则(如每天、每周、或文件大小)对日志文件进行轮转(重命名旧日志)、压缩、删除(保留指定份数),甚至可以在轮转后执行自定义脚本(如重启服务),从而避免日志文件无限增长耗尽磁盘空间。
为什么需要 logrotate?
系统和服务(如 rsyslog、nginx、httpd)会持续写入日志,时间久了文件会变得巨大,不仅占用磁盘,还会影响性能。
手动清理日志繁琐且容易出错,logrotate 实现了标准化、自动化管理。
logrotate 的工作原理
logrotate 通常由系统的定时任务(cron)每天自动运行一次。
主程序:/usr/sbin/logrotate
配置文件:/etc/logrotate.conf(全局配置)
应用配置目录:/etc/logrotate.d/(每个服务可单独放一个配置文件)
当 cron 触发 logrotate 时,它会读取所有配置,对符合条件的日志文件执行轮转操作。
logrotate 的核心配置指令
一个典型的 logrotate 配置由多个“规则块”组成,每个规则块指定要处理的日志文件路径及参数。常用指令如下:

配置文件示例
1. 全局配置 /etc/logrotate.conf
# 每周轮转
weekly
# 保留最近 4 个旧日志
rotate 4
# 创建新文件时使用默认权限
create
# 启用压缩
compress
# 包含 /etc/logrotate.d 下的所有配置
include /etc/logrotate.d
2. 针对特定服务的配置(例如 nginx)
在 /etc/logrotate.d/nginx 中:
/var/log/nginx/*.log {
daily # 每天轮转
missingok # 日志文件不存在也没关系
rotate 14 # 保留 14 天
compress # 压缩旧日志
delaycompress # 延迟压缩(避免压缩当前正在写入的日志)
notifempty # 空文件不轮转
create 0640 nginx adm # 轮转后新建日志文件,权限 0640,属主 nginx:adm
sharedscripts # 所有日志处理完后执行一次 postrotate
postrotate
if [ -f /var/run/nginx.pid ]; then
kill-USR1`cat /var/run/nginx.pid` # 通知 nginx 重新打开日志文件
fi
endscript
}
如何使用 logrotate
1. 手动测试配置是否正确
logrotate -d /etc/logrotate.conf
-d(debug)模式会模拟执行,不会实际轮转,只输出将要进行的操作,用于检查配置语法和预期行为。
2. 强制立即执行轮转
logrotate -vf /etc/logrotate.conf
-v:显示详细过程
-f:强制执行,即使未到轮转周期也会触发
也可以只强制某个服务的配置:
logrotate -vf /etc/logrotate.d/nginx
3. 查看上次运行时间
logrotate 的状态文件通常位于 /var/lib/logrotate/logrotate.status,记录了每个日志文件上次轮转的时间。
常见问题
Q: 为什么我配置了 daily,但日志没有每天轮转?A: logrotate 依赖 cron 每天执行一次,检查是否满足轮转条件。如果系统时间被更改,或者状态文件记录的时间未到,就不会触发。可以手动用 -f 强制执行测试。
Q: 如何按大小轮转?A: 使用 size 指令,例如 size 100M。注意如果同时指定了周期(如 daily),则满足任一条件就会轮转。
Q: 轮转后服务无法写入新日志?A: 常见原因是 postrotate 脚本没有正确通知服务重新打开文件。确保脚本中使用的是 kill -HUP 或 kill -USR1 等信号,不同服务可能不同(如 rsyslog 用 kill -HUP,nginx 用 kill -USR1)。
Q: 能否压缩后保留更长时间?A: 可以,rotate 指定保留份数,结合 compress 即可。例如 rotate 30 保留 30 个旧日志,如果每天轮转,就是约 30 天的历史。
总结
logrotate 是系统自带的日志管理利器,通过简单的配置即可实现自动化轮转、压缩、清理。
配置文件结构清晰,支持灵活的参数组合。
大多数服务(如 rsyslog、httpd、nginx)在安装时就会在 /etc/logrotate.d/ 下生成默认配置,通常无需修改即可工作。
若需调整,直接编辑对应的配置文件,然后可用 logrotate -d 验证,再用 -f 测试效果。
相比于手动编写清理脚本,使用 logrotate 是更标准、更可靠的做法,推荐在生产环境中采用。
8455线路检测中心官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,可以直接咨询。同时,8455线路检测中心整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。
更多技术知识,8455线路检测中心期待与你一起探索。
售前咨询
售后咨询
备案咨询
二维码

TOP