linux日志管理采用logrotate定义轮转规则、crontab定时触发的协同机制:logrotate配置轮转周期、保留数量、压缩选项及服务重载等,crontab按需调度执行,配合测试与状态文件确保稳定运行。

Linux 中结合 crontab 与 logrotate 管理日志,核心是“配置驱动 + 定时触发”:logrotate 负责定义轮转规则(何时切、保留几份、是否压缩),crontab 负责按时调用它执行。两者分工明确,不需手动干预,就能长期稳定控制日志体积。
logrotate 配置要写对关键指令
配置文件通常放在 /etc/logrotate.d/ 下(服务级)或全局 /etc/logrotate.conf 中。一个典型配置包含以下必要项:
-
轮转周期:用
daily、weekly或size 100M控制触发条件 -
保留数量:
rotate 30表示最多保留 30 个归档(含压缩后文件) -
压缩处理:加
compress启用 gzip;搭配delaycompress可避免最新一份被立即压缩,方便调试 -
安全选项:
missingok防止日志不存在时报错;notifempty避免空文件被轮转 -
权限与重建:
create 644 root root确保新日志文件权限正确 -
服务联动:在
postrotate/endscript块中写命令,如systemctl reload nginx或kill -USR1 `cat /var/run/nginx.pid`,让服务重新打开日志文件
crontab 定时调用 logrotate
系统默认通过 /etc/cron.daily/logrotate 每天凌晨运行一次,本质就是执行:/usr/sbin/logrotate /etc/logrotate.conf
如需更灵活调度(比如每 6 小时检查一次),可手动添加 root 的定时任务:
- 运行
sudo crontab -e - 添加一行:
0 */6 * * * /usr/sbin/logrotate /etc/logrotate.conf - 注意:不要设成分钟级(如
* * * * *),否则可能因频繁调用导致 I/O 冲突或产生大量小归档
验证和排错不能跳过
配置改完别直接等 cron 触发,先本地测试:
- 用
logrotate -d /etc/logrotate.d/myapp查看模拟执行过程,不真正改文件 - 用
logrotate -vf /etc/logrotate.d/myapp强制立即执行并显示详细输出,确认是否成功创建归档、压缩、触发 postrotate - 检查日志文件权限、归属是否符合
create设置;查看postrotate中的命令是否实际生效(比如 nginx 是否真重载了) - 留意状态文件(默认 /var/lib/logrotate/status),它记录上次轮转时间,影响周期判断
进阶:归档外迁与超期清理
logrotate 默认只在原目录轮转。若需集中归档到其他位置(如 NAS 或备份盘),可在 postrotate 中加迁移逻辑:
mv /var/log/app.log.*.gz /backup/logs/- 再配合独立的 cron 清理旧归档:
find /backup/logs -name "app.log.*.gz" -mtime +90 -delete - 务必使用绝对路径(如
/usr/bin/find),避免 cron 环境变量缺失导致命令失败











