rsyslog本身不控制切割频率,真正决定切割时机的是logrotate;修改切割节奏需调整logrotate配置(如daily、size、minsize等参数)并确保对应cron任务存在,而非修改rsyslog模板。

rsyslog 本身不直接控制“切割频率”,它只负责写日志;真正决定切割时机的是 logrotate —— 你看到的“每天切”或“每小时切”,其实是 logrotate 按计划执行的结果。想改切割频率,核心是改 logrotate 配置,不是动 rsyslog.conf。
logrotate 的切割周期由 cron 触发频率和配置中的时间参数共同决定
系统默认每天运行一次 logrotate(通过 /etc/cron.daily/logrotate),但这个行为可被覆盖。如果你在 /etc/logrotate.conf 或 /etc/logrotate.d/rsyslog 中写了 daily,那实际就是每天切一次;写成 hourly,就得配合 hourly cron 才能生效(多数发行版不自带 hourly cron)。
-
logrotate本身不自带定时器,全靠 cron 调用 - 标准 Ubuntu/Debian/CentOS 默认只有
/etc/cron.daily/,没有hourly目录 - 若强行配
hourly但没对应 cron job,该规则永远不会触发 - 要实现 hourly 切割,必须手动添加 cron 条目,例如:
0 * * * * /usr/sbin/logrotate /etc/logrotate.d/rsyslog
/etc/logrotate.d/rsyslog 配置中哪些参数影响切割节奏
这是最常被修改的位置。假设你已存在 /etc/logrotate.d/rsyslog 文件,里面内容类似:
/var/log/syslog
/var/log/auth.log {
daily
rotate 7
compress
missingok
notifempty
create 640 syslog adm
}其中真正控制“何时切”的只有两个参数:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
daily:表示“当 logrotate 运行时,如果距上次轮转已过 24 小时,则执行切割”——注意,它依赖 cron 运行时间点,不是绝对时间点 -
size 100M:替代daily,当日志文件大小 ≥ 100MB 时立即触发切割(下次 logrotate 运行时生效) - 二者不可共存;若同时出现,
size优先级更高 -
minsize 50M可与daily共用:意思是“必须满 50MB 且满足 daily 条件才切”,避免小日志频繁滚动
为什么改了 rsyslog 模板加时间戳 ≠ 真正的日志切割
有人在 rsyslog.conf 里加了类似这样的模板:
$template DailyLogs,"/var/log/myapp-%$YEAR%%$MONTH%%$DAY%.log" *.info ?DailyLogs
这看起来像“按天切”,但它只是让新日志写进带日期的文件,**不删除旧文件、不压缩、不限制数量、不通知服务 reopen** —— 它只是“归档路径动态化”,不是轮转(rotation)。后果是:
- 旧日志文件永远留在磁盘上,不会自动清理
- 如果应用不主动重开日志句柄,可能继续往旧文件写(取决于应用是否支持 SIGHUP)
- 没有
create、rotate等安全机制,权限/原子性无保障 - 排查时容易漏掉跨文件的日志流(比如凌晨切换瞬间的日志分散在两天文件里)
生产环境务必用 logrotate 做切割,rsyslog 模板仅作补充归档用途。最容易被忽略的一点是:改完 /etc/logrotate.d/rsyslog 后,必须手动跑一次 logrotate -f /etc/logrotate.d/rsyslog 测试是否报错,否则 cron 下次运行才发现语法错误,日志就堆死了。

















