收起左侧

解决Docker版迅雷闲置读写磁盘,导致硬盘无法进入休眠

0
回复
140
查看
[ 复制链接 ]

1

主题

1

回帖

0

牛值

系统先锋体验团🛩️

相信很多小伙伴都在用cnk3x的容器板迅雷吧,但这玩意有个最大的问题就是即使没有下载任务,也在后来读你的内容,其实就是偷偷上传。这样硬盘就始终无法进入休眠状态。编了一个脚本来解决该问题。主要手段就是定时判断迅雷容器是否有磁盘写入,如果一段时间没写入,则停止迅雷的docker compose。

代码如下:

#!/bin/bash
# ============= 仅修改这里 =============
COMPOSE_PROJECT="xunlei"  # 迅雷Compose项目名
IDLE_MIN=10                # 连续3分钟无写入变化 → 停止
# =====================================

# 配置文件
LAST_IO_FILE="/tmp/.xl_last_io"
IDLE_FILE="/tmp/.xl_idle"

# 1. 检查迅雷是否运行
if ! docker compose -p "$COMPOSE_PROJECT" ps | grep -q "Up"; then
    rm "$LAST_IO_FILE" "$IDLE_FILE" 2>/dev/null
    exit 0
fi

# 2. 获取容器名
CONTAINER_NAME=$(docker ps --filter "label=com.docker.compose.project=$COMPOSE_PROJECT" --format "{{.Names}}" | head -n1)
[ -z "$CONTAINER_NAME" ] && exit 0

# 3. 一次性获取 BlockIO(优化:只调用1次,避免数值不一致)
BLOCK_IO=$(docker stats --no-stream "$CONTAINER_NAME" --format "{{.BlockIO}}")
CURRENT_WRITE=$(echo "$BLOCK_IO" | awk '{print $3}')


# ========== 核心:判断磁盘写入是否变化 ==========
IO_CHANGE=0  # 默认:无变化(空闲)
if [ -f "$LAST_IO_FILE" ]; then
    LAST_WRITE=$(cat "$LAST_IO_FILE")
    # 写入数值变化 = 有任务
    if [ "$LAST_WRITE" != "$CURRENT_WRITE" ]; then
        IO_CHANGE=1
        echo "$CURRENT_WRITE" > "$LAST_IO_FILE"
    fi
else
    # 首次运行,记录基准值
    echo "$CURRENT_WRITE" > "$LAST_IO_FILE"
    IO_CHANGE=1
fi

# ========== 判定逻辑 ==========
# 有IO变化 → 清除空闲计时
if [ "$IO_CHANGE" -eq 1 ]; then
    rm -f "$IDLE_FILE"
    echo "[$(date)] 磁盘写入变化,保持运行"
    exit 0
fi

# 无IO变化 → 开始计时
echo "[$(date)] 磁盘写入无变化,进入空闲计数"
if [ ! -f "$IDLE_FILE" ]; then
    date +%s > "$IDLE_FILE"
fi

# 达到空闲时间 → 停止迅雷(飞牛状态同步)
IDLE_SEC=$(( $(date +%s) - $(cat "$IDLE_FILE") ))
if [ "$IDLE_SEC" -gt $((IDLE_MIN * 60)) ]; then
    docker compose -p "$COMPOSE_PROJECT" stop
    rm -f "$LAST_IO_FILE" "$IDLE_FILE"
    echo "[$(date)] 空闲超${IDLE_MIN}分钟,已停止迅雷"
fi

​

将代码保存到 /usr/local/bin/xunlei-auto-stop.sh

chmod +x /usr/local/bin/xunlei-auto-stop.sh

执行crontab -e

添加一行定时任务,每5分钟执行一次

*/5 * * * * /usr/local/bin/xunlei-auto-stop.sh

然后保存即可。

经测试,迅雷下载任务结束后,过10来分钟就自动停止了,之后硬盘就可以自动休眠了。需要使用迅雷时,再手动启动就行。

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则