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
def ecs_stop(client, instance_id):
status = get_ecs_status(client, instance_id)
if status == "Stopped": logger.info(f"ECS实例 {instance_id} 已经是停止状态,无需再次停止。")
return
666 枪战士 不是后面就没了
我的ip 还被收了费用
@qqab #11 有保活脚本啊;没了 不删,会保留;等资源有了 就开机了;
@hongdashao #10 大佬,这个提醒项目地址发我一下,谢谢
@Christopher #13 这个我是使用 ai工具 自己手搓的;很简单 就一个 tg机器人token 然后 阿里云 里面创建 用户 给他相应的权限;如下:我脱敏了,改成自己配置:python定时任务执行就行了;格式自己转了,反正下面的就是全部的脚本代码:
-- 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
import requests
from datetime import datetime
pip install aliyun-python-sdk-core aliyun-python-sdk-ecs requests
================== 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 = '' # 您的AccessKey ID
ACCESS_KEY_SECRET = '' # 您的AccessKey Secret
REGION_ID = 'cn-hongkong' # 区域ID
ECS_INSTANCE_ID = '' # 您要控制的ECS实例ID
流量阈值 (GB)
TRAFFIC_THRESHOLD_GB = 200
余额预警阈值(低于这个数会用⚠️提醒)
BALANCE_WARNING_THRESHOLD = 10
================== Telegram 配置 ==================
TG_BOT_TOKEN = ""
TG_CHAT_ID = ""
================== 查询账户余额 ==================
def get_account_balance(client):
request = CommonRequest()
request.set_domain('business.aliyuncs.com')
request.set_version('2017-12-14')
request.set_action_name('QueryAccountBalance')
request.set_method('POST')
def send_tg_summary(bot_token, chat_id, total_gb, threshold_gb, status_before, action, status_after, balance=None, currency=""):
icon = "🟢" if action == "启动" else "🔴" if action == "停止" else "⚪"
================== 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')
================== 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'))
================== 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
================== 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
================== 8. 主流程 ==================
def main():
total_gb = get_total_traffic_gb(client)
status_before = get_ecs_status(client, ECS_INSTANCE_ID)
balance, currency = get_account_balance(client)
if name == "main":
main()
@TK神话王思聪 #1 老哥 看我主页