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 强制执行轮转,即使未到期也是如此。
如何添加和测试规则
- 创建
/etc/logrotate.d/myapp并写入日志路径和指令,例如 weekly、rotate 4、compress、missingok、notifempty。 - 预演运行:
sudo logrotate -d /etc/logrotate.d/myapp - 如果输出看起来正常,则强制执行一次轮转:
sudo logrotate -f /etc/logrotate.d/myapp - 检查结果:查看日志目录的 ls -l。
注意事项
- 错误路径模式可能会轮转或删除其他程序的日志。
- 由 systemd journal 管理的日志在 journald.conf 中进行限制,而不是通过 logrotate。
相关文章
- journalctl 与 systemd 日志如何使用 journalctl 读取日志、检查日志占用的空间大小,并通过 --vacuum 选项安全地缩减日志大小。
- 使用 du 和 ncdu 查看磁盘使用情况如何使用 du 和交互式的 ncdu 查找 Linux 磁盘中被占满的内容,并提供保留在单个文件系统中的选项。
- cron 与 crontabcron 如何运行计划任务、五个 crontab 时间字段、系统 cron 文件的存放位置以及与 systemd 定时器的对比。
资料来源
- logrotate(8) man7.org
- logrotate(8) (Debian) manpages.debian.org
最后审核: