logrotate本身不支持跨机器同步,所谓“多台机器间同步轮转策略”实为统一配置、集中分发、一致生效;需通过git托管配置,ansible/rsync等工具分发至各节点,并验证权限、语法、定时任务及路径适配性。

配置文件统一托管与分发
所有 logrotate 规则应脱离单机编辑,统一存放在版本控制系统(如 Git)中,例如:
- 主配置
/etc/logrotate.conf的通用部分(如rotate 7、compress)作为基础模板 - 各服务的独立配置(如
/etc/logrotate.d/nginx、/etc/logrotate.d/myapp)按服务/环境拆分为独立文件 - 不同环境(prod/staging)可通过分支或目录区分,避免硬编码路径差异
自动化部署到目标机器
配置写好后,需可靠地推送到每台机器的对应位置。常用方式包括:
-
Ansible:用
copy或template模块覆盖/etc/logrotate.d/下文件,配合notify刷新状态(无需重启服务) -
rsync + SSH:适合小规模,例如
rsync -avz ./logrotate.d/ user@host:/etc/logrotate.d/ - 配置中心集成(如 Consul Template、SaltStack):动态生成配置并写入本地,适合容器化或云环境
验证配置是否真正生效
分发后不能默认“已同步”,必须逐台确认。关键检查点:
- 文件权限和属主正确:
ls -l /etc/logrotate.d/myapp应为 root:root,644 - include 行未被注释:
grep "include /etc/logrotate.d" /etc/logrotate.conf输出应为活动行 - 语法无误:
sudo logrotate -d /etc/logrotate.d/myapp 2>/dev/null | grep "error"不报错 - 状态文件时间更新:
sudo tail -1 /var/lib/logrotate/status确认最近轮转记录符合预期
避免常见同步陷阱
看似简单,但以下细节常导致策略“形同虚设”:
-
路径硬编码不一致:比如某台机器日志在
/data/logs/app.log,另一台在/var/log/app/app.log,配置必须适配实际路径 -
服务名或 PID 路径差异:
postrotate中的kill -USR1 `cat /var/run/nginx.pid`在某些系统可能为/run/nginx.pid,需按发行版或部署方式调整 -
定时任务未对齐:logrotate 依赖
/etc/cron.daily/logrotate,但某些机器 cron 可能被禁用或修改了执行时间,建议统一用systemctl list-timers | grep logrotate检查 - 手动修改残留:运维人员直接编辑某台机器的配置,后续部署会覆盖——应在 CI/CD 流程中加入“禁止手动改配置”的校验步骤











