services:
traffic-keeper:
image: alpine:latest
container_name: net-flow-generator
restart: unless-stopped
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
logging:
driver: "json-file"
options:
max-size: "5m"
max-file: "3"
tmpfs:
- /tmp
command:
- /bin/sh
- -c
- |
# ===================== 飞牛NAS适配配置项 =====================
#运行星期(1=周一,2=周二...7=周日,多个用空格分隔,如"1 2 3 4 5"仅工作日)
RUN_WEEKDAYS="1 2 3 4 5 6 7"
#每日运行开始时间(格式:HH:MM:SS)
RUN_START_TIME="09:00:00"
#每日运行结束时间(格式:HH:MM:SS)
RUN_END_TIME="17:29:59"
#下载速度限制(如2M=2MB/s、1000K=1000KB/s)
DOWNLOAD_SPEED="500K"
# 单次下载大小(字节,通过Range请求实现)
DOWNLOAD_SIZE="2000000000"
# 运行时:下载完成后休息时间(秒),1小时=3600秒
RUN_INTERVAL="4000"
# 非运行时:检测是否到运行时间的间隔(秒),10分钟=600秒
IDLE_CHECK_INTERVAL="600"
# 飞牛NAS常用稳定源(微软公开资源,支持Range,长期有效)
DOWNLOAD_URL="https://catalog.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/b7aa64b3-8441-4d36-b8f7-409f3cfeac1c/public/windows11.0-kb5074109-x64_fe29a336e6e650dda4038e82bcc0c6286c70b9a1.msu"
# ===================== 固定逻辑 =====================
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk add --no-cache curl || { echo "安装 curl 失败,退出"; exit 1; }
echo "=== 飞牛NAS流量脚本启动 ==="
echo "当前配置:"
echo " 运行星期: $$RUN_WEEKDAYS"
echo " 运行时段: $$RUN_START_TIME - $$RUN_END_TIME"
echo " 下载速度: $$DOWNLOAD_SPEED"
echo " 下载大小: $$DOWNLOAD_SIZE 字节"
echo " 下载链接: $$DOWNLOAD_URL"
echo "========================"
# 预检测链接是否可用
echo "=== 检测下载链接有效性 ==="
curl -I -L -s -w "%{http_code}\n" -o /dev/null "$$DOWNLOAD_URL" | grep -q "200"
if [ $$? -ne 0 ]; then
echo "⚠️ 下载链接无效,脚本退出"
exit 1
fi
echo "✅ 下载链接可用"
while true; do
current_weekday=$$(date +%u)
current_time=$$(date +%T)
start_sec=$$(echo "$$RUN_START_TIME" | awk -F: '{print $$1*3600 + $$2*60 + $$3}')
end_sec=$$(echo "$$RUN_END_TIME" | awk -F: '{print $$1*3600 + $$2*60 + $$3}')
current_sec=$$(echo "$$current_time" | awk -F: '{print $$1*3600 + $$2*60 + $$3}')
in_weekday=$$(echo "$$RUN_WEEKDAYS" | grep -w "$$current_weekday" | wc -l)
in_time=0
if [ $$current_sec -ge $$start_sec ] && [ $$current_sec -le $$end_sec ]; then
in_time=1
fi
if [ $$in_weekday -eq 1 ] && [ $$in_time -eq 1 ]; then
echo "$$(date +'%F %T'): [运行时段] 开始执行下载任务..."
# 用HTTP Range请求实现指定大小下载(飞牛NAS适配逻辑)
range_end=$$((DOWNLOAD_SIZE - 1))
curl -L -o /dev/null \
-sS \
--limit-rate "$$DOWNLOAD_SPEED" \
--range "0-$$range_end" \
-H 'Cache-Control: no-cache' \
-H 'Accept: */*' \
-A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \
--connect-timeout 20 \
--max-time 7200 \
--retry 10 \
--retry-delay 15 \
-w "结果: 耗时%{time_total}s | 均速%{speed_download}B/s | 状态%{http_code}\n" \
"$$DOWNLOAD_URL"
if [ $$? -ne 0 ]; then
echo "$$(date +'%F %T'): 下载异常,稍后重试"
fi
echo "$$(date +'%F %T'): 本轮任务结束,休息$$RUN_INTERVAL秒..."
sleep $$RUN_INTERVAL
else
echo "$$(date +'%F %T'): [空闲时段] 当前星期$$current_weekday $$current_time,非运行时间,$$IDLE_CHECK_INTERVAL秒后再次检查..."
sleep $$IDLE_CHECK_INTERVAL
fi
done
这段才是完整的代码,可以正常下载了,因为是第一次发含代码的,所以不知道原来的是不完整