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