宝塔定时脚本磁盘满自动清理日志文件

宝塔面板磁盘空间被日志占满如何自动清理?

当宝塔面板服务器长时间运行后,Nginx访问日志、错误日志、MySQL慢查询日志以及网站运行时产生的日志会快速积累,导致磁盘空间耗尽,网站无法正常访问。
解决思路是编写一个Shell脚本,保留最近N天的日志,删除过期文件,再通过宝塔面板的定时任务或系统Crontab自动执行。
本文针对零基础用户,提供可直接复制使用的脚本和配置步骤。

哪些日志最占空间?

  • Nginx日志:默认位置 /www/wwwlogs/,包含 .log 文件。
  • MySQL日志:通常位于 /www/server/data/,但宝塔默认不开启慢查询日志;如果开启过,文件可能很大。
  • 网站运行日志:部分程序(如WordPress、ThinkPHP)会在网站目录下生成 runtimelogs 文件夹。
  • 系统日志/var/log/ 下的 messagessecure 等,但一般不会满,可酌情清理。

编写自动清理脚本

在宝塔面板的 /root//www/ 下创建脚本文件,例如 clean_logs.sh

#!/bin/bash
# 保留日志天数(可修改)
RETENTION_DAYS=7

# Nginx日志目录
NGINX_LOG_DIR="/www/wwwlogs"
find "$NGINX_LOG_DIR" -name "*.log" -type f -mtime +$RETENTION_DAYS -exec rm -f {} \;

# 网站运行日志(假设你的网站日志在 /www/wwwroot/your_site/runtime)
# 可通过宝塔网站管理查看具体路径,下面为通用示例:
SITE_LOG_DIR="/www/wwwroot/*/runtime"
find $SITE_LOG_DIR -name "*.log" -type f -mtime +$RETENTION_DAYS -exec rm -f {} \;

# MySQL慢查询日志(如果开启)
MYSQL_LOG="/www/server/data/mysql-slow.log"
if [ -f "$MYSQL_LOG" ]; then
    # 清空文件(保留文件本身,避免MySQL写日志异常)
    cat /dev/null > "$MYSQL_LOG"
fi

echo "Log cleanup completed on $(date)"
注意rm -f 直接删除文件,如需更保守可用 > filename 清空内容。首次运行建议先 find ... -print 查看哪些文件将被删除。

给脚本执行权限:chmod +x /www/clean_logs.sh

配置定时任务(宝塔面板操作)

  1. 登录宝塔面板后台,点击左侧菜单 计划任务
  2. 点击 添加计划任务
  3. 任务类型 选择 Shell脚本
  4. 任务名称 填写 自动清理日志
  5. 执行周期 选择 每天,时间建议凌晨低峰期(如 03:00)。
  6. 脚本内容 粘贴上面完整的脚本。
  7. 点击 添加 保存。

如果需要更灵活的时间(比如每周末执行一次),可在宝塔计划任务中选择 Nginx - 日志切割 类似方式,但清理脚本推荐用Shell方式。

使用系统Crontab(可选)

如果你熟悉Linux命令行,也可以直接在SSH中编辑Crontab:

crontab -e
# 添加以下行(每天凌晨3点执行)
0 3 * * * /bin/bash /www/clean_logs.sh >/dev/null 2>&1

保存后,systemctl restart crond 或等待自动生效。

避坑指南

  • 不要删除当前正在写入的日志文件:上述脚本使用 -mtime +7 只删除 7 天前的文件,当天日志不会被删。但如果日志文件被程序锁定,rm 后可能无法释放磁盘空间。更稳妥的做法是使用 truncatecat /dev/null > 文件 清空内容。
  • MySQL慢查询日志清空:直接 rm 再创建新文件可能因权限问题导致MySQL无法写入。使用 cat /dev/null > 文件 保持 inode 不变。
  • 测试运行:初次执行前,先在SSH中运行脚本:bash /www/clean_logs.sh,观察输出和磁盘变化。
  • 日志切割:宝塔面板自带Nginx日志切割功能(计划任务-日志切割),会按天分割日志。如果已启用,清理脚本只需删除更早的切割文件即可。

效果验证

  1. 执行清理脚本后,执行 df -h 查看磁盘使用率是否下降。
  2. 检查 /www/wwwlogs/ 目录下日志文件是否只有近几天的。
  3. 访问网站确认功能正常。
  4. 查看宝塔计划任务执行日志:在计划任务列表点击“执行日志”,确认Shell脚本运行成功。

常见问题解答

Q1:执行脚本提示“Permission denied”怎么办?
A:脚本没有执行权限。执行 chmod +x /www/clean_logs.sh 再试。

Q2:我想保留30天的日志,如何修改?
A:修改脚本中的 RETENTION_DAYS=30,然后重新添加或编辑计划任务。

Q3:脚本运行后磁盘空间没释放是什么原因?
A:可能因为日志文件正在被进程使用,删除后空间并未释放。重启对应服务(如 nginx -s reopen)或使用 lsof | grep deleted 查找占用进程。或改用清空内容的方式代替删除。

Q4:宝塔面板自带的日志切割和这个清理脚本冲突吗?
A:不冲突。日志切割是将当前日志重命名并新建空文件;清理脚本是删除旧日志。两者配合可以更精细地管理日志生命周期。建议先了解宝塔日志切割的保留周期,再设置清理脚本的保留天数。

如果你使用的是如 泽御云 等正规云服务商提供的服务器,可参考其文档获取磁盘监控与告警配置,结合本文定时清理方案,能有效防止磁盘满导致的服务中断。

分享到:
上一篇
Nginx修复老旧TLS协议拦截浏览器访问
下一篇
搭建长尾关键词矩阵提升谷歌自然流量
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意