Linux中可使用logrotate -f强制立即执行日志轮转,需确保配置存在且路径权限正确,支持全局或指定服务配置,调试可用-d选项,-f忽略时间/大小条件但受ifempty影响。

Linux 中可以使用 logrotate 命令配合 -f(force)选项强制立即执行一次日志轮转,无需等待配置中设定的周期。
使用 logrotate -f 强制触发轮转
这是最直接有效的方式。前提是日志轮转配置已存在(通常在 /etc/logrotate.conf 或 /etc/logrotate.d/ 下),且目标日志文件路径被正确包含。
- 对所有配置生效:
sudo logrotate -f /etc/logrotate.conf - 仅对某个服务(如 nginx)生效:
sudo logrotate -f /etc/logrotate.d/nginx - 查看实际执行过程(加
-d调试模式):sudo logrotate -fd /etc/logrotate.d/nginx,它不会真正移动或压缩日志,只模拟并打印操作步骤
确认日志文件和配置匹配
强制执行失败常见原因是日志路径不一致或权限不足。
- 检查配置中定义的日志路径是否真实存在,例如:
/var/log/nginx/access.log - 确保
logrotate有读取配置、读写日志文件及创建归档目录的权限 - 若日志由特定用户(如
www-data)写入,而logrotate以 root 运行,通常没问题;但若配置里用了su指令,需注意上下文权限
验证轮转是否成功
执行后可快速检查效果:
- 原日志文件应被重命名(如
access.log→access.log.1),并生成新空文件 - 若有
compress选项,.1文件可能被压缩为access.log.1.gz - 查看
/var/lib/logrotate/status文件,确认对应日志的最后轮转时间已更新
临时绕过条件判断(如 size 或 daily)
-f 会忽略配置中的时间/大小条件(如 daily、size 100M),强制运行。但如果配置里写了 ifempty 且日志为空,仍可能跳过;此时可先追加一行内容再执行:
echo "FORCE ROTATE" >> /var/log/nginx/access.log- 再运行
sudo logrotate -f /etc/logrotate.d/nginx


















