logrotate 本身并 不会主动控制时间,它只是一个日志轮转工具,实际执行时间由 调用它的任务调度器 决定。

在 Linux 系统上,主要有两种方式:

通过 cron 调度(传统方式)

系统会在 /etc/cron.daily/logrotate 中配置 daily 执行脚本:

cat /etc/cron.daily/logrotate

cron.daily 默认执行时间:

由系统的 run-parts 调度,一般在 凌晨 6 点左右(不同发行版略有差异),默认每天执行一次。

原理

  • logrotate 脚本由 cron 调用
  • logrotate 检查配置文件(如 /etc/logrotate.d/apache2)
  • 满足轮转条件(时间或大小)则执行轮转

优点:简单、稳定、系统自带

缺点:执行时间固定,无法灵活调整到你希望的低峰期

自定义 cron 定时(更灵活)

你可以自己写 cron 任务,让 logrotate 在指定低峰时间执行,例如凌晨 2 点:

# 编辑 crontab
sudo crontab -e

# 每天凌晨 2 点执行 logrotate
0 2 * * * /usr/sbin/logrotate /etc/logrotate.conf

这样就可以完全控制轮转时间

可以针对高流量日志(Gunicorn 大日志)放在流量低时执行

按日志大小轮转(size-based rotation)

logrotate 配置中支持 size 参数:

/var/www/fastapi/logs/*.log {
size 100M # 文件大于 100MB 才轮转
rotate 7
compress
copytruncate
}

原理:

  • cron 每天检查日志
  • 仅当日志大小超过阈值才轮转
  • 避免低峰期没有必要的轮转

建议策略(生产环境)

方法 优点 注意事项
cron.daily 系统自带,简单 执行时间固定,可能不完全低峰
自定义 cron 灵活控制轮转时间 需要自己维护 crontab
size-based 避免频繁轮转大日志 配合定时执行效果最佳
compress + delaycompress 避免压缩正在写的日志 减少 CPU 和 IO 高峰

作者 admin

百度广告效果展示