📜 ZLMediaKit 日志按日期切割与自动清理方案
我的目的是让我的流媒体日志按日期存储,并且只保留最近一周的日志,超过的自动删除。这里可以用 logrotate 工具来实现,它是 Linux 系统自带的日志管理工具,非常适合这个场景。
1. 创建 logrotate 配置文件
首先,创建一个专门针对 ZLMediaKit 的 logrotate 配置文件:
bash
vim /etc/logrotate.d/zlmediakit
在文件中写入以下配置:
conf
/var/log/zlmediakit.log /var/log/zlmediakit_error.log {
# 每天切割一次日志
daily
# 保留最近7天的日志
rotate 7
# 切割时创建新的空日志文件
create
# 日志文件为空时不进行切割
notifempty
# 切割前将日志文件内容复制一份,再清空原文件
copytruncate
# 压缩旧日志(可选,节省磁盘空间)
compress
# 延迟压缩,避免刚切割就压缩影响查看
delaycompress
# 切割后的日志文件名格式:原文件名-日期
dateext
# 日期格式为 YYYYMMDD
dateformat -%Y%m%d
}
2. 配置说明
| 配置项 | 作用 |
|---|---|
daily |
每天执行一次日志切割 |
rotate 7 |
只保留最近7天的日志,超过的自动删除 |
copytruncate |
先复制日志内容再清空原文件,避免 ZLMediaKit 进程因为日志文件被删除而报错 |
dateext + dateformat |
让切割后的日志文件名带上日期,比如 zlmediakit.log-20260116 |
compress |
自动压缩旧日志,减少磁盘占用 |
3. 测试配置是否生效
配置完成后,可以手动执行一次测试,验证配置是否正确:
bash
logrotate --force /etc/logrotate.d/zlmediakit
执行后可以去 /var/log/ 目录下查看是否生成了带日期的日志文件,比如 zlmediakit.log-20260116。
运行后,我的文件已经分出来日期了。

4. 确保 logrotate 自动运行
logrotate 通常会通过系统的 cron 定时任务每天自动执行,默认的 cron 配置在 /etc/cron.daily/logrotate。
你可以检查这个文件是否存在,确保它有可执行权限:
bash
ls -l /etc/cron.daily/logrotate
如果权限不足,执行以下命令添加权限:
bash
chmod +x /etc/cron.daily/logrotate