马上注册,免费下载更多dz插件网资源。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
宝塔企业版才有的服务器空间占用系统优化清理功能脚本【全网首发 免费分享 专业企业级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')] -> [1/3] 执行秒级抢救:清空服务日志与系统缓存..." >> $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')] -> [2/3] 秒级急救完成!当前系统使用率降至: ${FAST_USAGE}%" >> $LOG_FILE
- # ---------------------------------------------------------
- # 【第二梯队】:重度与系统级清理(挂载后台低 I/O 运行,不卡顿)
- # ---------------------------------------------------------
- echo "[$(date '+%Y-%m-%d %H:%M:%S')] -> [3/3] 启动后台静默深度清理 (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'
- [Unit]
- Description=BT Panel Disk Space Guard Daemon
- After=network.target
- [Service]
- Type=simple
- ExecStart=/usr/local/bin/bt_disk_guard.sh
- Restart=always
- RestartSec=10
- StandardOutput=syslog
- StandardError=syslog
- SyslogIdentifier=bt-disk-guard
- [Install]
- WantedBy=multi-user.target
- EOF
复制代码 第三步:启动并激活守护进程
- # 重新加载 systemd 配置
- systemctl daemon-reload
- # 启动守护进程
- systemctl start bt-disk-guard
- # 设置开机自动启动
- systemctl enable bt-disk-guard
复制代码
通过 systemctl status bt-disk-guard 确保它运行正常。有了这套逻辑加持,你的服务器就具备了像大厂云主机一样的“磁盘自愈”能力。
©DZ插件网所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。 本站内容为站长个人技术研究记录或网络,不提供用户交互功能,所有内容版权归原作者所有。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,得到更好的正版服务。 您在本站任何的赞助购买、下载、查阅、回复等行为等均表示接受并同意签订《DZ插件网免责声明协议》。 如有侵权请邮件与我们联系处理: discuzaddons@vip.qq.com 并出示相关证明以便删除。敬请谅解!
|