logrotate 默认每周切割一次,前提是系统 cron 每日运行 /etc/cron.daily/logrotate 且 /etc/logrotate.conf 中启用 weekly;若服务单独配置(如 /etc/logrotate.d/nginx)声明 daily 等,则覆盖全局设置。

logrotate 默认就是每周切割一次,不需要额外配置——但前提是系统 cron 每天都正常运行 /etc/cron.daily/logrotate,且你没在配置里显式改成 daily 或 monthly。
确认 /etc/logrotate.conf 中的 weekly 是否生效
打开主配置文件:/etc/logrotate.conf,检查是否存在以下行(或类似):
weekly
如果看到的是 daily、monthly 或被注释掉了,那就不是 weekly。常见错误是误删或覆盖了这行。注意:该配置只控制「触发时机」,不保证一定每周切——它依赖 cron 每日调用 logrotate,logrotate 再根据时间戳判断是否真要轮转。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 若配置为
weekly,logrotate 会在首次运行时记录时间戳(默认存在/var/lib/logrotate/status),之后每次运行都比对当前日期是否已过下一个「周一」 - 如果系统某天 cron 没跑(比如关机、cron 被禁用),那下周的切割会延迟,但不会补上——logrotate 不做“补切”
- 不要手动改
/var/lib/logrotate/status文件,容易导致逻辑错乱;如需强制本周立即切,用logrotate -f
/etc/logrotate.d/ 下的服务配置会覆盖 weekly 吗
会。每个服务独立配置(如 /etc/logrotate.d/nginx)里的时间指令优先级高于全局 /etc/logrotate.conf。如果你发现 Nginx 日志每天都在切,但全局配的是 weekly,大概率是它的单独配置写了 daily。
- 检查对应文件是否包含
daily、weekly、monthly中的任意一个,且未被注释 - 没有声明时间指令时,才继承全局的
weekly - 混用
size 100M和weekly是允许的,满足任一条件即触发切割(“或”逻辑)
验证 weekly 是否真的按周执行
别只看配置,得看实际行为。最直接的方式是查状态文件和历史归档:
- 运行
logrotate -d -f /etc/logrotate.conf可模拟执行并打印决策过程(含“next rotation”时间) - 查看
/var/lib/logrotate/status,找对应日志路径的最后切割时间,比如:/var/log/syslog "2026-09-06"
表示上周日刚切过,下次应在 9 月 13 日 - 去日志目录看文件后缀:
syslog-20260906这类带日期的,说明启用了dateext;如果是syslog.1、syslog.2,则没开dateext,靠数字排序,反而难判断哪次是上周的
真正容易被忽略的点是:weekly 的“周”以周一为起点,但 logrotate 不校验系统时区或 locale,只认系统本地时间。如果你的服务器时区设成 UTC,而业务日志习惯按北京时间看,那切割时间可能和你预期差 8 小时——这不是 bug,是设计使然。

















