教程是结合论坛两位大佬的教程来的
这是主教程:
https://www.nodeseek.com/post-572284-1
其中直接安装debian的教程是根据这位大佬 @MJJYYDS 教程来的
https://www.nodeseek.com/post-911781-1
唯一有一点不一样的是,@MJJYYDS 大佬是从已装好开始的,而我是全新直接安装的,导致装好后没办法用默认的root账号密码登录,需要从vnc进去,输入passwd重置后,才能从ssh终端工具进去。
顺带还安装了 [Github]AliCDT-Manager 一个简单的阿里 CDT/抢占型 管理面板 全自动保活 国际站账单准确
超级好用。
我是移动联通三网都有,感觉有了这两台鸡,亚太的zouter skyline啥的都可以抛弃了。
最后请教一下,还能不能通过两台机器交替开机的方式白嫖啊
装完几个我常用的服务后占用如图:
屏幕截图 2026-09-04 201156
以下教程是按 CDT始祖教程 已经装好alpine的情况下重新安装debian13极简版
(如果是从零开始按 CDT始祖教程 安装,把第一步:OSS和第二步:自定义镜像这两段代入即可,有反馈从零开始安装极简版 Debian 13 镜像后不能直接用镜像默认密码登录,这个帖子给出了解决办法,请自测。)
【基础信息】
镜像链接:https://www.nodeseek.com/post-660810-1 (感谢作者)
镜像文件:debian-final.qcow2
(约 264MB,文件系统 采用 btrfs zstd:3 压缩,1G硬盘约等于可以当2G硬盘使用😏)
初始账号:root
初始密码:nodeseekdebian13js
SSH 端口:22
第一步:下载镜像并上传至阿里云 OSS
在电脑本地下载 debian-final.qcow2 镜像文件。
登录阿里云控制台,进入【云服务器 ECS】页面,确认并记住你的服务器所在地域(如:中国香港、杭州等)。
顶部搜索进入【对象存储 OSS】控制台:
点击【Bucket 列表】->【创建 Bucket】。
名称:debian13-1g。
地域:必须选择与你的 ECS 服务器完全一模一样的地域!
存储类型选“标准存储”,读写权限选“私有”,点击确定。
进入刚建好的 Bucket,点击【文件管理】->【文件列表】->【上传文件】。
将 debian-final.qcow2 拖入并完成上传。
复制 Bucket 文件一长串的网络地址
第二步:在 ECS 控制台导入自定义镜像
返回【云服务器 ECS】控制台。
检查页面左上角的地域切换菜单,确保处于服务器所在地域。
点击左侧菜单【实例与镜像】->【镜像】,切换到【自定义镜像】标签页。
点击【导入镜像】按钮(若提示授权,按提示点击前往授权即可):
OSS File 地址:黏贴 Bucket 文件一长串的网络地址
镜像名称:debian13-1g
操作系统:Linux -> Debian (64位)
架构:x86_64
系统盘容量:填 1 GiB
镜像格式:qcow2(可选)
点击【确定导入】,等待列表状态由“导入中”变为绿色的“可用”(约 2-5 分钟)。
第三步:更换服务器操作系统(写入镜像)
点击左侧菜单【实例与镜像】->【实例】。
找到你的 1G 硬盘服务器,点击右侧【更多】->【实例状态】->【停止】,等待状态变为灰色的“已停止”。
再次点击右侧【更多】->【云盘和镜像】->【更换操作系统】。
在跳转页面中:
镜像类型选择【自定义镜像】。
下拉框选择刚才导入好的【debian13-1g】。
勾选同意协议,点击【确认变更】。(点击后后台会自动把系统刷入硬盘)
第四步:启动服务器、SSH 连接与修改密码
返回实例列表,点击服务器右侧的【启动】,等待状态变为绿色的“运行中”。
使用 SSH 工具(如 FinalShell、Termius、Xshell 等)连接服务器公网 IP:
端口:22
账号:root
密码:nodeseekdebian13js
连接成功后,第一时间执行命令修改默认密码:
passwd
(按提示输入两次新密码并回车)
【注意】:系统首次启动后台会自动运行 1-3 分钟的 btrfs balance 数据平衡,刚登录时用 df -h 查看空间偏小属正常现象,静置 3 分钟后即可恢复正常(显示剩余约 650MB 可用空间)。
第五步:修复极简版环境
(极简版系统安装某些服务重启后启动不了,AI给的环境修复方案,实测有效!)
登录 SSH 后,直接复制以下整段修复命令,粘贴到终端中并按回车执行:
1. 彻底解除 apt 阻止服务自启的限制
rm -f /usr/sbin/policy-rc.d
echo '#!/bin/sh' > /usr/sbin/policy-rc.d
echo 'exit 0' >> /usr/sbin/policy-rc.d
chmod +x /usr/sbin/policy-rc.d
2. 补全底层核心组件
apt update && apt install -y kmod procps init-system-helpers cron systemd-sysv
3. 解封所有被屏蔽的 systemd 关键服务并设为开机自启
systemctl unmask systemd-modules-load systemd-sysctl cron
systemctl enable systemd-modules-load systemd-sysctl cron
4. 修复开机内核模块自动加载机制(注入 BBR 加载规则)
mkdir -p /etc/modules-load.d
echo "tcp_bbr" > /etc/modules-load.d/bbr.conf
5. 配置标准 sysctl BBR 参数
cat > /etc/sysctl.d/99-bbr.conf << 'EOF'
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
EOF
6. 重载 systemd 引擎并应用全局配置
systemctl daemon-reload
systemctl restart systemd-modules-load systemd-sysctl cron
sysctl --system
第六步:运行开荒脚本与重启验证(可选)
运行 vps99.sh 开荒脚本配置 zRAM 、定时清理等功能。
【如果是2c 512m 1g 的ecs.e-c4m1.large,强烈推荐本脚本,对小内存小硬盘有对应优化项】
执行 reboot 重启服务器:
reboot
重启完成后重新连入,运行脚本查看,BBR+FQ 与定时清理任务(Cron)是否生效。
【注意:安装完毕验证完成后,删除Bucket和镜像以免后续产生额外费用。】
附:个人自用开荒脚本
1,基础开荒
https://github.com/BeacherZ/vps99.sh
(极简版系统没有swap,推荐用这个脚本开启物理内存ZRAM(swap plus😜),压榨512m内存且不占用宝贵的1G硬盘空间,另外此脚本还能部署Cron定时清理空间的 /root/vps99clean.sh 子脚本,非常契合1G硬盘长期稳定使用)
2,SSH改密钥登录&Fail2Ban
https://github.com/BeacherZ/key.sh
(请谨慎操作,改完密钥登录不要关闭ssh窗口,新开一个窗口测试密钥登录成功后再禁止密码登录)
|✈️Telegram✈️|♥️以针会友♥️|✉️论坛私信✉️|
3
4
0
147
引用
回复
123456
MJJYYDS
MJJYYDS楼主
22days ago edited 11days ago
#41
教程第三步:更换服务器操作系统(写入镜像)
漏了一个关键步骤: ESSD云盘大小选择【1G】
【脚本更新】vps99.sh 项目新增:阿里云 CDT 1G 硬盘专属版开荒脚本
针对 阿里云 CDT 1G 系统盘(或其他 ≤ 2G 系统盘)的小磁盘机器做的专用版本。相比通用版仅清理模块有差异,其他模块(BBR / zRAM / Docker / 时区 / 汇报 / 交互 UI)逐字一致。
🚀一键执行
bash <(curl -fsSL https://raw.githubusercontent.com/BeacherZ/vps99.sh/main/vps99-1g.sh)
与通用版的差异
项目 通用版 1G 专属版
journalctl 上限 7d + 100M 10M
深度清理 无 doc / man / consolefonts / i18n / terminfo / locale / firmware / pycache
aliyun-assist 不动 只保留最新版本目录,删旧版本
清理子脚本 /root/vps99clean.sh /root/vps99clean-1g.sh
日志限制10M的原因是我实测稳定运行20多天后,日志仅占用8M而已,所以可以极限设置10M不影响正常使用。
适用原因
阿里云镜像预装两份 aliyun-assist(旧版 + 新版),加上 journal、doc、man 等残留,长期运行后磁盘从 400M 涨到 500M 以上,1G 版专门深度清理这些项目。
从通用版切换到 1G 版
先清旧 cron 和子脚本,再跑新脚本:
crontab -l 2>/dev/null | grep -v 'vps99clean' | crontab -
rm -f /root/vps99clean.sh /root/vps99clean-1g.sh
aliyun-assist 安全性
脚本只删旧版本目录,保留最新版本 + symlink。不影响阿里云控制台关机/重启、云监控、云助手命令下发。
建议
磁盘 ≥ 2G 用通用版;阿里云 CDT 1G 系统盘用 1G 版。
更新(2026.01.10):
重要提示:从自制镜像中读取到的 alpine virt iso 救援系统,在 VNC 执行 setup-alpine,将正式系统写入到硬盘后,该临时系统还运行在内存中,必须要重启!必须要重启!必须要重启!重启后进入到的 alpine 系统,才是从系统硬盘中读取的正式系统,才可以进行设置 DNS、配置源、清除硬盘标签、执行脚本重装等后续工作。
援引 & 致谢:
使用阿里云CDT 享受每月200G/4元高速流量
后续高阶玩法,支持用脚本重装,请移步:
【全网首发】极限低成本吃满阿里云 CDT 200G 高速流量:Alpine 作为救援系统,一键重装 Debian(修复 GRUB / 清理 isohybrid 残留全流程)
援引源网站证书于 2026 年 1 月 4 日失效,且网站开启了 HSTS,无法为此网站添加例外以访问,web archive 里也没有存档,我保存了一份在本地,本帖对该篇教程的过时内容和不完善内容进行一些修订,该教程同样适合阿里云国际站。
原理:阿里云香港最近表现不错,但新手轻量优惠不可选择香港,只能正价购买香港轻量,持有成本较高,所以我们可以利用阿里云(含阿里云国际版)每个账号免费赠送的 200 GB CDT(云数据传输)流量,配合配置最低的 ECS 实例,达到低成本搭乘阿里云香港网络快线的方法。
CDT公网流量免费额度提升至220 GB/月
产品:
CDT 公网流量
免费额度与适用地域:
免费额度为 220 GB/月,其中:
中国内地地域:20 GB/月
非中国内地地域:200 GB/月
线路类型:
BGP(多线)
正文:
本文将介绍如何开启 CDT + 创建阿里云抢占式实例 + 保活,实现月付最低 4 元,享受 200G 单向出网高速流量的方法。
零、开通阿里云 CDT 功能
在控制台首页搜索框,直接输入“CDT”,自动弹出“控制台 > 云数据传输”选项,点击;或直接访问:https://cdt.console.aliyun.com/overview (阿里云国际站:https://cdt.console.alibabacloud.com/overview ),进入 CDT 工作台。
确认当前账户下的所有 CDT 子功能,如图示开通,如果还没有开通,选择未开通子项,点击“一键升级”:
.png
一、开通阿里云 OSS 并上传 alpine 镜像
搜索栏搜索 oss 并开通:
37350c8a94e49975dafd7666ad36e8d635131673.jpeg
fbf8492a522bdd26d8731966ceeba1d25459f8a1.png
5f14fdfe67e522f83ba1e0e67c9b4be0cb43c1b6.png
上传镜像至 oss
2.1 点击管理控制台,创建 bucket,地域切记选择香港:
8e8f6d767176259252eebdc1c4b0473d6d217133.jpeg
2.2 创建成功后,进入 bucket,上传所需 apline 镜像:
https://dl-cdn.alpinelinux.org/alpine/v3.23/releases/x86_64/alpine-virt-3.23.2-x86_64.iso
24f06ef80633428461c51cf340af665a6c08a5b6_2.jpeg
点击上传文件,上传刚刚下载好的 alpine 镜像:
2291084db4f0a487d7c8ecf27cfd835908976eac.jpeg
b124bed93cedcbc7b5dc2858ad961255b1601190.jpeg
2.3 保存上传好的镜像链接,下一步要用:
2c83aea9f784e576d0f2140cf419504b657860ff.jpeg
二、创建系统镜像
导入镜像:
点击 https://ecs.console.aliyun.com/image/region/cn-hongkong (阿里云国际站:https://ecs.console.alibabacloud.com/image/region/cn-hongkong ),导入刚刚上传到 oss 的 alpine 镜像:
2c64e0b0c2436640ce7df48103131d35617dc56a.jpeg
点击下一步:
d545f5fd171b171f55d8669576d2e65d78bd0028.jpeg
“镜像检测 → 导入后执行检测”最好不勾:
3d8162412e85f8a7af13faf09a337758c62dacb2.jpeg
“云盘配置 → 配置云盘属性”勾选,alpine virt ISO 镜像体积很小,虽然原文里给 1GB 空间启动足够,但保险起见,还是建议给 2GB 以上,除非你执意只给 ECS 配置 1GB 的硬盘,但安装许多系统会受限制(系统本体、应用、日志等)。后面创建机器时可选的硬盘容量,必须等于或大于导入镜像步骤设置的云盘容量。
e6e55d4c8f4860cbec634af619e5a196ecb590e2.jpeg
耐心等待创建完成:
861be70312e9b40c7fc9767f457a9a4209a8d210.jpeg
三、创建抢占式实例
在 https://ecs.console.aliyun.com/server/region/cn-hongkong#/ (阿里云国际站:https://ecs.console.alibabacloud.com/server/region/cn-hongkong#/ )创建抢占式实例:
规格搜索:ecs.e-c4m1.large 选中该“经济型”:
e6a96680c82085d9c83a65543d6a8d07f5b8f5cb.jpeg
实例使用时长:无确定使用时长(否则按默认只设置 1 小时,1 小时后被删机);
单台实例上限价格:使用自动出价,香港不同的区价格不一样,而且随资源变化随时浮动,图示价格仅供参考;
实例中断模式:节省停机(必须选这个,否则还是被删机);
区域香港 B、C、D 区任意,首次创建时,会自动配置好对应地区的 VPC,不需要手动配置;
镜像选我们刚才创建的自定义的 alpine;
系统盘容量看自己选择,ESSD Entry 单 GB 价格便宜,但最低要配置 10 GB,极限容量下,价格比 ESSD 云盘贵,推荐 5 - 8 GB 的 ESSD 云盘或 10 GB 的 ESSD Entry 硬盘,1 - 2 GB 的那种玩法有点极限。
0314d80593f1a9f2410d2a5932296a9b5885cfcb.jpeg
先暂不分配 IPv4 地址,原因是该抢占式实例属于可被随时停机的那种,如果有大户开机,占据了某可用区(香港:B、C、D 区任意)的大量资源,这些抢占式实例被停机后,再次启动时,创建时自动分配的 IPv4 地址会被释放,所以我们需要使用 EIP 来使这台机器的 IPv4 地址固定;安全组、防火墙等自行做入网、出网设置,全开就行;如果对 IPv6 的使用没有强需求,建议不要为实例分配 IPv6 地址,阿里云对 IPv6 的支持仍然不是很好。
0f7306e592676647728d8cb8acb0374eef6cbf7d_2_652x500.jpeg
确认配置无误,开氪:
5901ac454460b6634dcf532b4be61769baf4cbfa.jpeg
四、创建 EIP(弹性公网 IP)
EIP 纯持有是持续扣费的,只要绑定到实例后,就不扣费了,后期机器如果不要了删除,记得把闲置的 EIP 也删掉,否则会产生额外费用。
进入 EIP 功能区:
访问:https://vpc.console.aliyun.com/eip/cn-hongkong/eips (阿里云国际:https://vpc.console.alibabacloud.com/eip/cn-hongkong/eips )创建:
3fb8150cf601fb418715a1f1a8812191116715e6.jpeg
确认配置,点击购买:
付费模式:按量付费;
地域和可用区:中国香港;
线路类型:BGP(多线),BGP 多线精品不享受 200GB CDT 免费额度;
网络类型:公网;
安全防护:默认;
计费模式:按 CDT 计费;
带宽峰值:ecs.e-c4m1.large 的口子为 200 Mbps,拉满。
54dbdc88b55e80d83474e8f899be57f569e57eb3.png
63d5ef67e8e66dfcd323da19431336fdbe9056a4.png
绑定实例:
访问:https://ecs.console.aliyun.com/server/region/cn-hongkong (阿里云国际:https://ecs.console.alibabacloud.com/server/region/cn-hongkong ),操作 → 三个点 → 绑定弹性公网 IP:
5d88c53b2b45aebea27e0295cd5a89287dfbd9f5.jpeg
394c95f5769e6fdd0180f921a3e27ddb08d430ba.jpeg
返回弹性公网 IP,创建加入共享带宽,可继续加大出网带宽量:
0601d00ec38be5328d9bf386f7c3866d897cad40.jpeg
计费方式:按主流量(入出取大);
计费模式:按 CDT 计费;
带宽:根据需求自选,拉太大了会增加流量的消耗速度。
98221135ed0fa91df8667500875bc920478662e9.png
63d5ef67e8e66dfcd323da19431336fdbe9056a4.png
在阿里云国际版做过测试,如果下单失败,显示:因安全问题,此次下单被终止,Request ID: 一串 UUID。需要访问:https://account.alibabacloud.com/kyc/index#/kyc 做 KYC 验证,它的审核特别严格,且阿里云国际版注册时,仅支持选择海外地区,根据接码手机号区号,确定账号主体注册区域,如果没有当地合法的长期居留身份,这一步基本无法通过,只能退而求其次,使用实例自带的 200 Mbps 的口子。
c12c74f74306a7d03dd5f7bfa8c5751332d8adee.jpeg
现在就成为 2 Gbps 口子的服务器了。
五、安装系统
安装
首次需要登录 VNC,输入 root,密码为空,来到 Localhost#: 状态,输入
setup-alpine
进行首次安装,这个跟平时我们安装软件差不多的,一路回车,下一步下一步基本就可以了,其中有几步需要修改一下的,我在图片上标出来。
da1a9f15cacffdb5e3bf51f3ff12032e8bc01506.png
这就配置好网络了,阿里云使用 DHCP,不需要手动配置网络。
589a7119ad90e1e432fc4f7d8da4615528c6a7af.png
这样配置好用户名和密码及时区,代理跳过(如果只按原文图示直接按“49”,有可能会连接到一个速度极慢的源,因为这个镜像列表是实时更新的,截止我做测试时,阿里云的镜像源序号是“44”,这个序号未来还会根据该列表的更新而随时变化,切勿刻舟求剑,需要先按“s show mirrorlist”显示镜像源列表,然后选择来自 https://mirrors.aliyun.com/alpine/ 的源)。
3592cfb62b5fca28bd91dca01ffc5684396ab43b.png
启用 root 用户,并使用密码方式验证登录。
配置磁盘、分区、格式化
4fd7ca62b003fcc4d237e403c94e9da47ec06a80.png
这一步会提示 No disks available,Try boot media /media/vda ? 意思没有找到可用有磁盘,是否尝试安装到vda云盘上,改
y
安装完成后
reboot
重启,首次安装向导就完成了。
重要提示:从自制镜像中读取到的 alpine virt iso 救援系统,在 VNC 执行 setup-alpine,将正式系统写入到硬盘后,该临时系统还运行在内存中,必须要重启!必须要重启!必须要重启!重启后进入到的 alpine 系统,才是从系统硬盘中读取的正式系统,才可以进行设置 DNS、配置源、清除硬盘标签、执行脚本重装等后续工作。
修改 DNS
由于 alpine 系统还未联网,所以这一步还是需要在 VNC 中操作,如果不设置 DNS,只能 ping 通 IP 地址,无法 ping 通域名。
输入
setup-dns
1b6ab9e54a53a5d0d2d42b70b7f599d71830913b.png
DNS domain name:
nameserver
DNS 地址随意,推荐:
1.1.1.1 8.8.8.8
当系统的网络连接功能完全正常后,便可使用 Xshell 等 ssh 工具进行远程连接。
安装 curl,vim
先更新一下软件源:
apk update
安装组件:
apk add curl vim
其它应用也是类似。
添加额外源(可选)
仓库配置路径:
/etc/apk/repositories
打开仓库配置文件:
vim /etc/apk/repositories
将社区源开头注释去掉:
http://mirrors.aliyun.com/alpine/v3.23/main # 默认配置,主要的源
http://mirrors.aliyun.com/alpine/v3.23/community # 社区源,默认未开启,去掉前面#号
添加 edge 源,拥有很多第三方应用,旧版 alpine 配置 edge 源,安装软件时,会产生很多依赖问题,不推荐:
http://mirrors.aliyun.com/alpine/edge/community
http://mirrors.aliyun.com/alpine/edge/testing
将仓库配置文件保存后,再次更新源:
apk update
已经开好了,剩下的玩法大伙自己发掘吧,现在可以把 oss 与镜像删除了,防止额外扣费。
b9dde0fedfaf9acfa98d61e465260f8158987728.jpeg
519d988fbbf1d9888a766502fea4ef12dbd7ef99_2_598x499.jpeg
82576617b89f593d402025109a7903ad94dc041c.jpeg
六、保活服务器
需要使用阿里云 sdk。
先创建一个用户并赋予权限
访问:https://ram.console.aliyun.com/users (阿里云国际版:https://ram.console.alibabacloud.com/users)
85c74cdd36f9b43ebea2f3b6417f78760293ae9a.jpeg
记得保存 AccessKey ID、AccessKey Secret,后面需要用到。
为刚创建的用户增加授权
22d26032574fc6692ff5e55e5e58ce872eeddab0.jpeg
新建修改下列脚本,安装必要依赖,设定每分钟执行。切记在另外的机器上设置,不要在阿里云抢占式实例自己上运行。使用 crontab 设置为每分钟执行一次。
-- coding: utf-8 --
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from aliyunsdkecs.request.v20140526 import StartInstancesRequest, StopInstancesRequest, DescribeInstancesRequest
import json
import sys
import logging
pip install aliyun-python-sdk-core aliyun-python-sdk-ecs
================== 1. 配置日志 ==================
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s",
stream=sys.stdout)
logger = logging.getLogger(__name__)
================== 2. 配置阿里云凭证和ECS实例信息 ==================
ACCESS_KEY_ID = 'LTAIxxxxxxx' # 您的AccessKey ID
ACCESS_KEY_SECRET = 'xxxxxxxxxx' # 您的AccessKey Secret
REGION_ID = 'cn-hongkong' # 区域ID
ECS_INSTANCE_ID = 'i-xxxxxxxxx' # 您要控制的ECS实例ID
流量阈值 (GB)
TRAFFIC_THRESHOLD_GB = 180
================== 3. 初始化客户端 ==================
try:
client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, REGION_ID)
logger.info("AcsClient initialized successfully.")except Exception as e:
logger.error(f"Failed to initialize AcsClient: {e}")
sys.exit(1)
================== 4. 查询当前总流量 ==================
def get_total_traffic_gb(client):
request = CommonRequest()
request.set_domain('cdt.aliyuncs.com')
request.set_version('2021-08-13')
request.set_action_name('ListCdtInternetTraffic')
request.set_method('POST')
try:
response = client.do_action_with_exception(request)
response_json = json.loads(response.decode('utf-8'))
total_bytes = sum(d.get('Traffic', 0) for d in response_json.get('TrafficDetails', []))
total_gb = total_bytes / (1024 ** 3)
logger.info(f"当前总互联网流量: {total_gb:.2f} GB")
return total_gb
except Exception as e:
logger.error(f"获取CDT流量失败: {e}")
sys.exit(1)
================== 5. 查询ECS实例状态 ==================
def get_ecs_status(client, instance_id):
try:
request = DescribeInstancesRequest.DescribeInstancesRequest()
request.set_InstanceIds([instance_id])
response = client.do_action_with_exception(request)
response_json = json.loads(response.decode('utf-8'))
instances = response_json.get("Instances", {}).get("Instance", [])
if not instances:
logger.error("未找到该ECS实例信息。")
return None
status = instances[0].get("Status")
logger.info(f"ECS实例 {instance_id} 当前状态: {status}")
return status
except Exception as e:
logger.error(f"获取ECS实例状态失败: {e}")
return None
================== 6. 启动ECS实例 ==================
def ecs_start(client, instance_id):
status = get_ecs_status(client, instance_id)
if status == "Running":
logger.info(f"ECS实例 {instance_id} 已经是运行状态,无需启动。")
return
try:
request = StartInstancesRequest.StartInstancesRequest()
request.set_InstanceIds([instance_id])
request.set_accept_format('json')
response = client.do_action_with_exception(request)
logger.info(f"ECS启动响应: {response.decode('utf-8')}")
except Exception as e:
logger.error(f"启动ECS实例失败: {e}")
================== 7. 停止ECS实例 ==================
def ecs_stop(client, instance_id):
status = get_ecs_status(client, instance_id)
if status == "Stopped":
logger.info(f"ECS实例 {instance_id} 已经是停止状态,无需再次停止。")
return
try:
request = StopInstancesRequest.StopInstancesRequest()
request.set_InstanceIds([instance_id])
request.set_ForceStop(False)
request.set_accept_format('json')
response = client.do_action_with_exception(request)
logger.info(f"ECS停止响应: {response.decode('utf-8')}")
except Exception as e:
logger.error(f"停止ECS实例失败: {e}")
================== 8. 主流程 ==================
def main():
total_gb = get_total_traffic_gb(client)
if total_gb < TRAFFIC_THRESHOLD_GB:
logger.info(f"流量 {total_gb:.2f} GB < 阈值 {TRAFFIC_THRESHOLD_GB} GB,尝试启动 ECS")
ecs_start(client, ECS_INSTANCE_ID)
else:
logger.info(f"流量 {total_gb:.2f} GB ≥ 阈值 {TRAFFIC_THRESHOLD_GB} GB,尝试停止 ECS")
ecs_stop(client, ECS_INSTANCE_ID)
logger.info("脚本执行完毕。")
if name == "__main__":
main()