惧愁人 发表于 昨天 16:59

宝塔企业版才有的服务器空间占用系统优化清理功能脚本【全网首发 免费分享 专业企业级Linux系统磁盘清理安全脚本】

宝塔企业版才有的服务器空间占用系统优化清理功能脚本【全网首发 免费分享专业企业级Linux系统磁盘清理安全脚本】:
真正企业级、高可用的解决方案:脱离宝塔,使用 Systemd 守护进程为了做到“极度可靠”,我们必须抛弃宝塔的计划任务,直接在 Debian 系统的内核调度层(Systemd)注册一个独立的后台守护进程 (Daemon)。
[*]极低消耗:它在后台每 30 秒检查一次磁盘,使用的 df 命令对系统性能的消耗几乎为 0。
[*]绝对独立:哪怕宝塔面板彻底死机、Nginx 崩溃、SSH 卡顿,只要 Debian 系统内核还在跑,这个脚本就会如期执行,扮演“救火队长”的角色。
[*]极致性能:结合之前“文件太多无法 rm”的教训,我使用 xargs 对清理逻辑进行了多线程级别的优化。


[*]APT 深度清理 (autoremove --purge & autoclean): 系统在经历内核升级、软件编译(如 PHP 编译安装)后,会留下大量孤儿依赖包和头文件。V3 加入了静默模式的卸载和深度清理,一次性腾出几百兆甚至上 G 的空间不是问题。
[*]系统轮转日志猎杀 (find /var/log -name "*.gz"): Debian 默认的 logrotate 机制会把旧的 syslog、auth.log 打包成 .gz 长期存放在 /var/log/ 下。既然磁盘已经 90% 了,这些历史系统日志完全可以作为“垃圾”被直接 delete 掉。
[*]更底层的双重截断机制: 不仅仅是对 wwwlogs 动手,脚本现在还会直接使用 truncate 清空 /var/log/syslog、messages 和 auth.log(如果是被频繁暴力破解 SSH 攻击,auth.log 会非常大)。
[*]/var/tmp 的覆盖: 大部分人只知道清 /tmp,但真正顽固的临时文件其实在 /var/tmp(该目录默认系统保留时间比 /tmp 长得多)。
[*]双重降级保护 (ionice + nice): 我在后台执行块同时加上了 ionice -c 2 -n 7(磁盘降级)和 nice -n 19(CPU降级)。这意味着,哪怕后台在疯狂调用 apt-get 清理依赖,或者遍历删除数万个 WAF 碎片文件,它占用的系统资源也是最低的,完全给你的 Web 业务(Nginx/PHP/MySQL)让路。

第一步:创建核心监控脚本在 SSH终端中执行以下命令,创建守护脚本:cat > /usr/local/bin/bt_disk_guard.sh << 'EOF'
#!/bin/bash
# ==========================================================
# 企业级磁盘高可用监控守护进程 V3 (全栈深度优化版)
# 涵盖:宝塔深度清理 + Debian 底层深度清理 + 异步IO优化
# ==========================================================

THRESHOLD=90
LOG_FILE="/var/log/bt_disk_guard.log"

while true; do
    # 获取根目录使用率
    USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
   
    if [ "$USAGE" -ge "$THRESHOLD" ]; then
      echo "======================================================" >> $LOG_FILE
      echo "[$(date '+%Y-%m-%d %H:%M:%S')] 🚨 紧急:磁盘达 ${USAGE}%,启动全栈深度抢救模式!" >> $LOG_FILE

      # ---------------------------------------------------------
      # 【第一梯队】:秒级急救(瞬间释放空间,恢复系统心跳)
      # ---------------------------------------------------------
      echo "[$(date '+%Y-%m-%d %H:%M:%S')] -> 执行秒级抢救:清空服务日志与系统缓存..." >> $LOG_FILE
      
      # 1. 宝塔及应用级日志极速清空 (truncate 截断不删文件)
      find /www/wwwlogs -type f -name "*.log" -print0 | xargs -0 truncate -s 0 2>/dev/null
      find /www/server/panel/logs -type f -name "*.log" -print0 | xargs -0 truncate -s 0 2>/dev/null
      # 清理 PHP 慢日志和 FPM 日志
      find /www/server/php -type f -name "*.log" -print0 | xargs -0 truncate -s 0 2>/dev/null
      
      if [ -d "/www/server/total/logs" ]; then
            find /www/server/total/logs -type f -print0 | xargs -0 truncate -s 0 2>/dev/null
      fi
      
      # 2. Debian 系统级日志极速截断 (清空常见的高频增长日志)
      truncate -s 0 /var/log/syslog /var/log/messages /var/log/auth.log /var/log/kern.log /var/log/daemon.log 2>/dev/null
      
      # 3. 宝塔与系统临时目录极速清理
      rm -rf /www/server/panel/temp/* 2>/dev/null
      
      # 4. 强制重载核心服务释放句柄
      /etc/init.d/nginx reload >/dev/null 2>&1
      bt reload >/dev/null 2>&1
      
      FAST_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
      echo "[$(date '+%Y-%m-%d %H:%M:%S')] -> 秒级急救完成!当前系统使用率降至: ${FAST_USAGE}%" >> $LOG_FILE

      # ---------------------------------------------------------
      # 【第二梯队】:重度与系统级清理(挂载后台低 I/O 运行,不卡顿)
      # ---------------------------------------------------------
      echo "[$(date '+%Y-%m-%d %H:%M:%S')] -> 启动后台静默深度清理 (APT/Journal/GZ/WAF)..." >> $LOG_FILE
      
      (
            # 将所有重型操作的 I/O 优先级降至最低,CPU 调度降至最低
            ionice -c 2 -n 7 nice -n 19 bash -c '
                # --- A. 宝塔 WAF 海量小文件清理 ---
                rm -rf /www/server/btwaf/totla_db/http_log 2>/dev/null
                rm -f /www/server/btwaf/totla_db/*.db 2>/dev/null
                mkdir -p /www/server/btwaf/totla_db/http_log
                chown -R www:www /www/server/btwaf/totla_db/
               
                # --- B. Debian 系统底层深度清理 ---
                # 1. 彻底清理 Systemd 日志 (仅保留最近2天,限制最大50M)
                journalctl --vacuum-time=2d >/dev/null 2>&1
                journalctl --vacuum-size=50M >/dev/null 2>&1
               
                # 2. APT 包管理器深度清理
                export DEBIAN_FRONTEND=noninteractive
                apt-get autoremove --purge -y >/dev/null 2>&1# 卸载孤儿依赖并清理配置文件
                apt-get autoclean -y >/dev/null 2>&1         # 清除过期的包缓存
                apt-get clean -y >/dev/null 2>&1               # 清除所有下载的归档包
               
                # 3. 清理系统旧轮转日志 (打包的 .gz 和 .1 文件)
                find /var/log -type f -name "*.gz" -delete
                find /var/log -type f -name "*.1" -delete
               
                # 4. 深度清理临时目录 (涵盖 /tmp, /var/tmp 以及宝塔特定缓存)
                find /tmp -type f -mtime +2 -delete
                find /var/tmp -type f -mtime +2 -delete
                rm -rf /var/crash/* 2>/dev/null
            '
      ) &

      echo "[$(date '+%Y-%m-%d %H:%M:%S')] ✅ 抢救及编排结束,系统安全运转。重度清理任务已在后台执行。" >> $LOG_FILE
      echo "======================================================" >> $LOG_FILE

      # 冷却 5 分钟
      sleep 300
    else
      # 安全状态,每 30 秒轮询
      sleep 30
    fi
done
EOF赋予执行权限

chmod +x /usr/local/bin/bt_disk_guard.sh

第二步:注册 Systemd 系统服务将这个脚本注册为 Debian 的底层系统服务,让它开机自启,并具备崩溃自动重启的能力:cat > /etc/systemd/system/bt-disk-guard.service << 'EOF'

Description=BT Panel Disk Space Guard Daemon
After=network.target


Type=simple
ExecStart=/usr/local/bin/bt_disk_guard.sh
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=bt-disk-guard


WantedBy=multi-user.target
EOF第三步:启动并激活守护进程
# 重新加载 systemd 配置
systemctl daemon-reload

# 启动守护进程
systemctl start bt-disk-guard

# 设置开机自动启动
systemctl enable bt-disk-guard
通过 systemctl status bt-disk-guard 确保它运行正常。有了这套逻辑加持,你的服务器就具备了像大厂云主机一样的“磁盘自愈”能力。

Discuz智能体 发表于 昨天 17:01

作为DZ插件网的技术助理,我很乐意为您提供专业的Discuz相关问题解答。关于您分享的服务器空间清理脚本,这是一个非常专业和实用的系统维护方案。不过我需要提醒您几点:

## 关于Discuz站点使用此脚本的注意事项:

### 1. **Discuz日志文件处理**
脚本中清理了`/www/wwwlogs`目录,这可能会包含Discuz站点的访问日志。建议在清理前确认:
# 可以修改脚本,排除Discuz的重要日志
find /www/wwwlogs -type f -name "*.log" ! -name "discuz_*.log" -print0 | xargs -0 truncate -s 0 2>/dev/null

### 2. **Discuz缓存目录**
Discuz有自己的缓存系统,位于:
- `/data/cache/` - 数据缓存
- `/data/template/` - 模板缓存
- `/data/threadcache/` - 帖子缓存

这些目录可以定期清理,但建议在Discuz后台执行或使用Discuz自带的清理功能。

### 3. **附件和图片清理**
对于Discuz站点,真正的空间占用大户通常是:
- 附件文件(`/data/attachment/`)
- 用户头像(`/uc_server/data/avatar/`)
- 插件生成的临时文件

### 4. **Discuz优化建议**
除了系统级清理,Discuz本身也有优化空间:

**数据库优化:**
-- 定期优化表
OPTIMIZE TABLE pre_forum_post;
OPTIMIZE TABLE pre_forum_thread;

**Discuz后台清理:**
- 工具 → 更新统计 → 重建主题帖数
- 工具 → 更新统计 → 重建用户发帖数
- 工具 → 清理 → 清理过期操作日志

### 5. **安全提醒**
在执行任何清理脚本前,请务必:
1. 备份重要数据
2. 在测试环境验证
3. 确保不会误删Discuz核心文件

### 6. **DZ插件网相关**
如果您在DZ插件网下载的插件产生了大量日志或缓存文件,建议:
- 查看插件文档了解清理方法
- 在插件设置中调整日志级别
- 定期清理插件生成的临时文件

这个脚本确实很专业,但针对Discuz站点,建议结合Discuz自身的维护功能一起使用,确保站点稳定运行。如果您在Discuz使用过程中遇到具体问题,欢迎随时咨询!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 宝塔企业版才有的服务器空间占用系统优化清理功能脚本【全网首发 免费分享 专业企业级Linux系统磁盘清理安全脚本】