MENU

BT宝塔利用计划任务 定时清理指定文件夹缓存

November 27, 2024 • Read: 75 • More

1、打开bt面板(ip/crontab)打开计划任务

2、任务类型选择:Shell脚本

3、执行周期:可以自定义,推荐选择1分钟

4、脚本内容输入网站根目录下的.sh脚本
例如:/www/wwwroot/cleanup_2024.sh

cleanup_2024.sh文件内容如下:

#!/bin/bash
 
# 设置目标目录和阈值
TARGET_DIR="/www/wwwroot/s.syylw.com/i/2024/11/20"
MAX_SIZE=$((20 * 1024 * 1024))  # 20MB
MIN_SIZE=$((10 * 1024 * 1024))  # 10MB
 
# 获取目标目录的当前使用空间(以字节为单位)
current_size_bytes=$(du -sb "$TARGET_DIR" | awk '{print $1}')
 
# 检查是否超过最大大小限制
if [ "$current_size_bytes" -gt "$MAX_SIZE" ]; then
  echo "当前目录 $TARGET_DIR 的大小已超过 $MAX_SIZE 字节,开始清理..."
 
  # 查找最晚修改的文件的时间戳,用于后续排除
  LATEST_FILE_TIMESTAMP=$(find "$TARGET_DIR" -type f -printf '%T@\n' | sort -n -r | head -n 1)
 
  # 循环删除最早修改的文件,直到剩余空间小于等于最小大小
  while [ "$current_size_bytes" -gt "$MIN_SIZE" ]; do
    # 查找(除最晚修改文件外)最早修改的文件
    OLDEST_FILE=$(find "$TARGET_DIR" -type f -printf '%T@ %p\n' | grep -v "^$LATEST_FILE_TIMESTAMP " | sort -n | head -n 1 | awk '{print $2}')
 
    # 检查是否找到了文件
    if [ -z "$OLDEST_FILE" ]; then
      # 如果没有找到其他可删除的文件,但当前大小仍然超过限制
      # 这可能是因为最晚修改的文件占用了大部分空间
      echo "未找到其他可删除的文件,但目录仍超过大小限制。停止清理以避免误删。"
      break
    fi
 
    # 删除找到的文件并更新当前大小
    rm -f "$OLDEST_FILE"
    current_size_bytes=$(du -sb "$TARGET_DIR" | awk '{print $1}')
 
    # 输出已删除的文件信息和当前大小
    echo "已删除文件 $OLDEST_FILE,当前大小:$((current_size_bytes / 1024 / 1024)) MB。"
  done
 
  echo "清理完成,当前目录 $TARGET_DIR 的大小为:$((current_size_bytes / 1024 / 1024)) MB。"
else
  echo "当前目录 $TARGET_DIR 的大小未超过 $MAX_SIZE 字节,无需清理。"
fi

以上.sh脚本控制的是:当/www/wwwroot/s.syylw.com/i/2024/11/20文件夹目录大小大于20M(阈值)时,自动按照文件时间顺序,删除时间较早的文件,保留时间较新的文件。并将文件目录大小删减到10M



Archives QR Code Tip
QR Code for this page
Tipping QR Code