定时清理磁盘日志防止站点磁盘空间爆满

先看看你的磁盘还剩多少空间

在日常运维中,“磁盘爆满”是导致网站无法正常访问、数据库写入失败、后台登录卡顿的常见原因之一,而日志文件往往是无声的“磁盘杀手”。
很多新手装了站点后很少去检查磁盘使用率,直到突然发现网站打不开,通过 df -h 命令一看,//var 分区占用已 100%。

运行下面这条命令,就能看到各分区的使用百分比:

df -h

重点关注挂载点为 //home 的行。
如果 Use% 超过 80%,说明该动手了。
随后要找出到底是什么日志在“吃空间”。

定位最占空间的日志文件

常见日志存放路径有:

  • /var/log/ – 系统日志(如 messagessyslogsecure
  • 如果使用 Nginx,日志通常在 /var/log/nginx/ 或站点目录下的 log/ 文件夹
  • 如果使用 MySQL,日志可能在 /var/log/mysql//var/lib/mysql/(binlog)
  • 面板类如宝塔,日志一般在 /www/wwwlogs/

可以先用 du 命令快速按目录大小排序:

du -sh /var/log/* /www/wwwlogs/* 2>/dev/null | sort -rh | head -20

这条命令会把所有日志目录按大小从大到小排好,一眼就能看出哪些文件最占空间。

编写一个自动清理脚本

找到占空间的日志后,不要手动去“删文件”,因为很多服务(如 Nginx、MySQL)在运行时不会立刻释放已删除文件的磁盘空间,可能导致服务异常。
正确的做法是用截断(truncate)按日期清理

创建一个脚本文件(比如 /root/clean_logs.sh),内容如下:

#!/bin/bash
# 清理超过 7 天的旧日志文件,保留最新日志
# 注意:只清理已轮转的 .log.* 文件,不直接删除当前正在写入的 .log

LOG_DIRS=("/var/log" "/www/wwwlogs")

for dir in "${LOG_DIRS[@]}"; do
  if [ -d "$dir" ]; then
    find "$dir" -type f -name "*.log.*" -mtime +7 -exec rm -f {} \;
  fi
done

# 如果某些日志达到指定大小,也可以直接截断
# truncate -s 0 /var/log/nginx/access.log  按需启用

注意-mtime +7 表示修改时间超过 7 天的文件,
只匹配 *.log.*(例如 access.log.1 error.log.20250325.gz),
不会动正在写的 access.log 本身。

保存后,给脚本执行权限:

chmod +x /root/clean_logs.sh

设置定时任务自动运行

使用 crontab 让脚本每天凌晨自动执行一次。
执行以下命令进入编辑模式:

crontab -e

在文件末尾添加一行:

0 3 * * * /root/clean_logs.sh > /dev/null 2>&1

解释:0 3 * * * 表示每天凌晨 3 点执行。> /dev/null 2>&1 表示不产生输出日志,避免重复写邮件。

保存退出(若用 nano 按 Ctrl+O 回车,Ctrl+X
若用 vim 按 :wq 回车)。

检查定时任务是否生效:

crontab -l

避坑与常见问题

不要直接删除系统关键日志

/var/log/secure(登录日志)、/var/log/messages(系统消息)这些文件,如果直接删除会导致服务重新启动后无法写入。
正确做法是使用 logrotate 进行轮转和压缩,而不是手动删除。
如果你的系统已经配置了 logrotate,一般只需检查配置,不用额外操作。

为什么清理后磁盘空间没释放?

如果某个日志文件正在被服务占用(比如 Nginx 正在写入),使用 rm -f 删除后,磁盘空间不会立刻释放,必须重启服务或使用 truncate 命令。
脚本中我们匹配的是 *.log.* 这类历史文件,当前日志不受影响,所以不会有这个问题。

如果我是宝塔面板用户

宝塔面板自带一个“计划任务”功能,你可以在后台添加一个 Shell 脚本任务,粘贴上面的清理脚本内容,设置每天执行一次,效果一样。

验证自动清理是否生效

手动执行一次脚本:

bash /root/clean_logs.sh

再用 df -h 对比前后磁盘使用率是否下降。
如果没有变化,检查脚本中的目录是否存在,或者日志文件命名是否匹配 *.log.* 模式。
你可以先运行 find /var/log -type f -name '*.log.*' 来确认确实有这类文件。

提示:第一次使用建议把 -mtime +7 改成 -mtime +0 进行测试,确认无误后再改回 7 天。

总结

通过本文的步骤,你已经学会了如何查看磁盘占用、识别占用空间大的日志、编写安全清理脚本并设置定时任务。定时清理磁盘日志防止站点磁盘空间爆满不再是一个难题。
如果你在操作过程中遇到任何异常,优先回到“避坑”部分检查是否触碰了系统日志红线,或者确认脚本权限和路径是否正确。

分享到:
上一篇
WordPress缓存插件适配海外低速网络环境
下一篇
swap分区扩容缓解服务器频繁OOM内存溢出
1
系统公告

机房迁移升级通知

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