【基于各种多模态文件的在线预览系统】6、关于日志定期清理的情况
这是个好习惯——这次故障的病根就是磁盘被日志/数据写满,把日志治理好能避免再栽同一个坑。我按"宝塔层面"和"CentOS 系统层面"分开讲,都给可直接执行的方案。
一、宝塔(BT)层面的日志
1. 网站访问日志(最容易爆的,就是这次 /www/wwwlogs/ 那批)
宝塔自带切割,但默认未必开。两个做法:
- 面板里开自动切割:网站 → 对应站点 → 设置 → 日志 里有切割选项;或者在「计划任务」里加一个「网站日志切割」任务,选所有站点,按天切割、保留 N 份(比如 7 份),宝塔会自动压缩旧日志并删超期的。
- 对纯内部服务直接关访问日志:你那几个站(可道云被 Zabbix/axios 每 30 秒探活刷屏)访问日志意义不大。在站点设置里关掉「写访问日志」开关(你截图里那个绿色的开关),能直接省下绝大部分增量。可道云这种自己人用的,建议关。
2. 宝塔面板自身日志 宝塔 → 设置 → 有「面板日志」「请求日志」,可以设置自动清理。/www/server/panel/logs/ 下也会堆,纳入下面的 logrotate 一起管。
3. 各类中间件日志 MySQL 慢查询/错误日志、PHP-FPM 日志、Nginx 全局日志,都在 /www/server/ 各自目录下,统一用下面的 logrotate 管最省心。
二、CentOS 系统层面:用 logrotate 统管(推荐)
CentOS 7 自带 logrotate,这是 Linux 治理日志的标准工具。给你一份覆盖宝塔常见日志的配置,新建一个文件即可:
vi /etc/logrotate.d/bt-custom
写入(按需改路径):
/www/wwwlogs/*.log {
daily # 每天切割
rotate 7 # 只保留 7 份(7 天)
missingok # 文件不存在不报错
notifempty # 空文件不切
compress # 旧日志 gzip 压缩
delaycompress # 延迟一天压缩(配合正在写的文件)
copytruncate # 关键:复制后清空原文件,不需要重启 nginx
dateext # 文件名带日期后缀
}
copytruncate 这个选项对宝塔/nginx 特别重要——它不动文件句柄,nginx 不用 reload 就能继续写,避免你这次"满了之后服务卡住"的连锁反应。
测试配置是否正常(不会真删,只演练):
logrotate -d /etc/logrotate.d/bt-custom
手动跑一次看效果:
logrotate -f /etc/logrotate.d/bt-custom
logrotate 默认由系统每天自动执行(/etc/cron.daily/logrotate),配好就不用管了。
三、systemd journal 日志(常被忽略,能悄悄吃掉几个 G)
CentOS 7 的 journald 会持续累积。查当前占用:
journalctl --disk-usage
限制它的体积,改配置:
vi /etc/systemd/journal.d/size.conf
[Journal]
SystemMaxUse=500M # 最多占用 500M
SystemMaxFileSize=50M # 单文件最大 50M
MaxRetentionSec=2week # 最多保留两周
systemctl restart systemd-journald
也可以立即清理超过指定时间/大小的:
journalctl --vacuum-time=7d # 只留 7 天
journalctl --vacuum-size=500M # 只留 500M
四、Docker 日志(你跑着图纸知识库等容器,这块会涨)
这次磁盘满 Docker 脱不了干系。Docker 容器的 json-file 日志默认无上限,会一直涨。全局限制一下,改 daemon.json:
vi /etc/docker/daemon.json
加入(注意和你已有的 data-root 等配置合并,别覆盖):
{
"data-root": "/home/docker",
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3"
}
}
systemctl restart docker
这样每个容器日志最多 50m×3=150m 封顶。注意:这个设置只对重启后新建的容器生效,现有容器要 docker compose up -d --force-recreate 重建一次才套用(数据卷里的数据不受影响)。
优先级建议
如果只想快速见效、不想全做,按这个顺序:
- 关掉内部站点(可道云)的访问日志开关 —— 立刻止住最大的增量来源。
- 配
/etc/logrotate.d/bt-custom(带 copytruncate) —— 一劳永逸管住 wwwlogs。 - 改 Docker
daemon.json加 log-opts —— 管住容器日志。 - journald 限制 —— 锦上添花。
做完这四步,基本不会再因为日志把磁盘撑满了。等你可道云那个 setting.php 恢复了,可以顺手把这些一起配上。需要我帮你把上面几段整理成一个可直接粘贴执行的脚本吗?

浙公网安备 33010602011771号