Rain WikiWindows · Linux · Android

logrotate

服务大多数 Linux 发行版

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

1典型规则

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

2copytruncate

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

3测试

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。

资料来源

  1. logrotate(8) man7.org
  2. logrotate(8) (Debian) manpages.debian.org

最后审核: