磁盘空间爆满一键清理无用日志脚本

为什么日志会撑爆磁盘空间?

服务器运行久了,系统日志(如 /var/log)、应用日志(如 Nginx、MySQL 日志)和临时文件会不断堆积。
如果不定期清理,很容易出现 磁盘空间爆满,导致服务无法写入数据。
手动逐个删除太麻烦,而且新手容易误删重要文件。
本文提供一个安全、可带参数的一键清理 Shell 脚本,你只需复制保存、赋予权限就能运行,适合 CentOS / Ubuntu 等主流 Linux 系统。

---

准备工作:先查看当前磁盘占用

在运行任何清理之前,先用以下命令确认哪些目录占用了大量空间:

df -h     # 查看各分区总体使用率
du -sh /var/log   # 检查日志目录具体大小

重点关注 /var/log/tmp/var/cache 等目录。
如果某个日志目录超过几 GB,就可以用我们的脚本来清理。

---

编写一键清理无用日志脚本

创建一个脚本文件 clean_logs.sh

vim clean_logs.sh

粘贴以下内容(请根据实际环境微调目录和保留天数):

#!/bin/bash
# 一键清理无用日志和临时文件
# 安全模式:默认只列出待删除文件,加 --run 参数才真正删除

LOG_DIRS=(
    "/var/log"
    "/var/cache"
)
EXPIRE_DAYS=3   # 保留最近3天的日志

if [ "$1" == "--run" ]; then
    ACTION="delete"
else
    ACTION="list"
fi

echo "扫描待清理文件..."
for dir in "${LOG_DIRS[@]}"; do
    if [ -d "$dir" ]; then
        if [ "$ACTION" == "list" ]; then
            find "$dir" -type f -name "*.log" -mtime +$EXPIRE_DAYS 2>/dev/null
        else
            find "$dir" -type f -name "*.log" -mtime +$EXPIRE_DAYS -exec rm -f {} \; 2>/dev/null
            echo "已清理 $dir 中超过 $EXPIRE_DAYS 天的日志"
        fi
    fi
done

# 清理临时文件(超过2天未使用的临时文件)
if [ "$ACTION" == "delete" ]; then
    find /tmp -type f -atime +2 -delete 2>/dev/null
    echo "已清理 /tmp 中超过2天未访问的文件"
fi

if [ "$ACTION" == "list" ]; then
    echo "以上是待清理文件列表(共 ${#files[@]} 个)。如需真正删除,请执行:bash clean_logs.sh --run"
else
    echo "清理完成"
fi
说明:脚本默认先预览(只列出不删除),确保无误后再加 --run 实际执行。这种设计可以防止新手误删重要日志。

保存退出后,赋予执行权限:

chmod +x clean_logs.sh

---

执行脚本并设置定时任务

先模拟运行,查看会清理哪些文件:

./clean_logs.sh

确认没有问题后,真正执行清理:

./clean_logs.sh --run

如果你希望每周自动运行一次,可以添加到 crontab:

crontab -e

添加以下行(每周日凌晨3点执行):

0 3 * * 0 /path/to/clean_logs.sh --run >> /var/log/clean_logs.log 2>&1

---

避坑指南(新手必读)

  1. 不要用 rm -rf /var/log:直接删除整个日志目录可能导致日志系统报错。我们只删除超过保留天数的 .log 文件,不动目录结构。
  2. 先预览再执行:第一次运行时务必先用不带参数的脚本预览,确认不会误删正在写入的日志。
  3. 保留天数根据需求调整:对于审计要求严格的业务,建议保留30天;一般服务器保留3-7天即可。
  4. 日志被占用无法删除:如果某个日志正在被进程写入,rm 会成功但磁盘空间不会立即释放。需要先 systemctl restart rsyslog 或重启对应服务。
  5. 不要清理 /var/log/wtmp/var/log/btmp 等特殊日志:这些文件记录了系统登录历史,通常应保留。我们的脚本只清理 *.log,不会误删它们。

---

效果验证:对比清理前后的磁盘占用

清理前后建议分别执行 df -h 对比,例如:

df -h

观察 / 分区的 已用可用 数值。
如果从 98% 降到了 50%,说明脚本生效了。
更详细的验证可以用:

du -sh /var/log   # 再次查看日志目录大小

---

常见问题(FAQ)

Q:运行脚本提示 Permission denied?
A:记得先 chmod +x clean_logs.sh,或者用 bash clean_logs.sh 直接执行。

Q:我能不能一次性删除所有日志而不保留天数?
A:不建议。至少保留最近几天的日志,方便排查近期故障。你可以将 EXPIRE_DAYS 改为 0,但请谨慎。

Q:清理后空间没有明显减少?
A:查看是否还有磁盘占用大户(如 Docker 镜像、核心转储文件)。日志清理只是第一步,其他文件可能需要额外处理。

---

结语

通过这个一键清理脚本,你可以快速安全地释放被日志撑爆的磁盘空间。
关键是先预览再删除,并设置自动定时任务,让服务器永远保持干净。
如果你正在排查磁盘占满问题,建议先按本文步骤操作一遍,再根据自身环境微调脚本中的目录和保留天数。
遇到异常时请回看避坑指南部分。

分享到:
上一篇
负载均衡Nginx分发请求降低单服压力
下一篇
多PHP版本切换兼容老旧外贸程序
1
系统公告

机房迁移升级通知

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