Rain Wiki · Linux

logrotate

logrotate 的作用、/etc/logrotate.conf 和 /etc/logrotate.d 中的配置原理,以及如何安全地测试规则。

Linux · Rain Wiki

logrotate 是一个 Linux 工具,用于对日志文件进行轮转、压缩和删除,以防它们填满磁盘。它通常由 systemd 定时器或 cron 任务每天运行一次,读取 /etc/logrotate.conf 以及 /etc/logrotate.d/ 中的各软件包规则。

典型规则

规则指定了一个或多个日志文件以及诸如 daily 或 weekly(频率)、rotate 7(保留多少个旧文件)、compress(用 gzip 压缩旧文件)、missingok(文件不存在时不报错)、notifempty(跳过空日志)以及 postrotate ... endscript(轮转后运行的命令,例如重新打开日志)等指令。

copytruncate

有些程序会持续写入同一个打开的文件。copytruncate 会复制日志然后截断原文件,而不是移动它,因此程序可以保留其文件句柄;在复制期间写入的少数几行可能会丢失。

测试

'logrotate -d /etc/logrotate.conf' 在调试模式下运行,仅打印将要发生的操作。'-f' 强制执行轮转,即使未到期也是如此。

如何添加和测试规则

  1. 创建 /etc/logrotate.d/myapp 并写入日志路径和指令,例如 weekly、rotate 4、compress、missingok、notifempty。
  2. 预演运行:sudo logrotate -d /etc/logrotate.d/myapp
  3. 如果输出看起来正常,则强制执行一次轮转:sudo logrotate -f /etc/logrotate.d/myapp
  4. 检查结果:查看日志目录的 ls -l。

注意事项

  • 错误路径模式可能会轮转或删除其他程序的日志。
  • 由 systemd journal 管理的日志在 journald.conf 中进行限制,而不是通过 logrotate。

资料来源

最后更新: 2026-10-08

相关文章