logrotate 定期清理 Docker 日志
使用 logrotate
工具来定期清理 Docker 容器的日志是一个很好的方法。下面是如何设置 logrotate
来每周清理一次 Docker 日志的示例:
logrotate
(如果尚未安装):
1. 安装 sudo yum update
sudo yum install logrotate
logrotate
配置文件,比如 /etc/logrotate.d/docker-logs
:
2. 创建一个 sudo vi /etc/logrotate.d/docker-logs
3. 在配置文件中添加以下内容来定义 Docker 容器日志的清理规则。下面的示例将每周清理一次日志,保留最近 4 周的日志文件。
/var/lib/docker/containers/*/*.log {
weekly
rotate 4
missingok
notifempty
compress
delaycompress
copytruncate
}
在上面的配置中,你需要将 /var/lib/docker/containers/*/*.log
替换为你实际的 Docker 容器日志路径。这个配置会执行以下操作:
weekly
:每周运行一次日志轮转。rotate 4
:保留最近的 4 个旧日志文件。missingok
:如果日志文件不存在,则继续处理下一个。notifempty
:如果日志文件为空,则不轮转。compress
:压缩旧日志文件。delaycompress
:在下一次轮转之前延迟压缩。copytruncate
:复制并截断原始日志文件,以便在轮转时不影响正在写入的进程。
4. 保存配置文件并退出编辑器。
logrotate
是否按预期工作:
5. 运行以下命令来测试 sudo logrotate -d /etc/logrotate.conf
这将显示 logrotate
运行的详细日志,以供你检查是否正确。
- 添加一个定时任务,让
logrotate
每天运行一次,来处理所有配置文件:
sudo vi /etc/cron.daily/logrotate
在打开的文件中,确保包含以下内容:
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
- 保存文件并退出编辑器。
现在,logrotate
将每周定期清理 Docker 容器的日志,保留最近 4 周的日志文件。确保根据你的实际情况和需求进行适当的配置。