麒麟OS日志轮转默认由logrotate管理,主配置在/etc/logrotate.conf(如weekly、rotate 4),服务规则在/etc/logrotate.d/;需用logrotate -d验证生效策略,并注意journald与rsyslog双写冲突及cron依赖。

查默认轮转配置:先看 /etc/logrotate.conf 和 /etc/logrotate.d/
麒麟OS 默认使用 logrotate 管理日志生命周期,它的主配置在 /etc/logrotate.conf,而服务级细化规则(如 rsyslog、nginx)则分散在 /etc/logrotate.d/ 下的独立文件里。直接读这两个位置,就能看到系统“默认怎么转”。
-
cat /etc/logrotate.conf会显示全局策略,比如默认保留 4 周日志(rotate 4)、每周轮转一次(weekly)、启用压缩(compress) -
ls /etc/logrotate.d/可列出各服务规则,例如rsyslog文件通常规定/var/log/syslog和/var/log/messages按大小或时间轮转 - 注意:如果某日志文件没被任何规则覆盖(比如你自建的
/var/log/myapp.log),它就不会自动轮转——logrotate 不会“猜”你要管什么
验证当前生效策略:用 logrotate -d 模拟执行
光看配置文件不够,因为条件判断(如 if [ -s /var/log/messages ])和包含逻辑可能让实际行为和预期不一致。用调试模式跑一次,能看清 logrotate 到底“认不认这个文件”、准备怎么处理。
- 运行
logrotate -d /etc/logrotate.conf,输出里会逐行告诉你哪些日志匹配了哪条规则、是否满足轮转条件(比如大小是否超size 100M)、是否要压缩或删除旧归档 - 常见坑:配置写了
daily,但系统没配 cron 触发,实际从不轮转;logrotate -d不会真正写磁盘,只模拟,安全 - 若输出中没看到你的目标日志(如
/var/log/audit/audit.log),说明它不在任何生效规则里——得手动加一条到/etc/logrotate.d/audit或主配置
改策略前必做:确认 journald 是否已接管、避免双重写入
麒麟OS V10+ 默认同时启用 rsyslog 和 systemd-journald,而后者本身也带日志生命周期管理(通过 /etc/systemd/journald.conf)。如果两个服务都往同一路径写日志,或者都启用了轮转,容易导致日志丢失、重复或权限错乱。
- 检查
rsyslog是否还在写/var/log/messages:grep -E "^\*.\*.*messages" /etc/rsyslog.conf /etc/rsyslog.d/*.conf - 检查 journald 是否持久化:
ls /var/log/journal/存在即开启;再看Status=输出是否含Storage=persistent(systemctl show systemd-journald | grep Storage) - 典型冲突场景:journald 已存 30 天日志,你还给
/var/log/messages配了rotate 30—— 实际日志量翻倍,且排查时容易搞混来源
自定义轮转要注意的三个硬限制
麒麟OS 的 logrotate 虽然兼容标准语法,但在国产环境里有几个隐性约束,不注意就会失效。
-
create指令需指定权限和用户:create 640 syslog adm才能保证新日志文件可被 rsyslog 写入;漏掉用户组常导致服务报Permission denied - 大日志文件(>2GB)慎用
copytruncate:它靠截断原文件实现“不停服轮转”,但在某些麒麟内核版本上可能丢最后几 KB 日志 - 时间类参数(
daily/weekly)依赖系统时间准确;若机器长期离线或 NTP 同步失败,logrotate可能误判“还没到轮转时间”,建议搭配minsize或size双重触发
最常被忽略的是:logrotate 本身不启动,全靠 cron 驱动。麒麟桌面版默认有 /etc/cron.daily/logrotate,但如果你关了 cron 或改过 crontab,那所有轮转规则都是纸上谈兵。

















