打开/关闭搜索
搜索
打开/关闭菜单
54
677
62
1925
md5.pw
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
上传文件
打开/关闭外观设置菜单
通知
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
登录
请求账号
查看“︁使用搬瓦工api监控网络流量的使用并telegrambot通知”︁的源代码
来自md5.pw
分享此页面
更多语言
查看
阅读
查看源代码
查看历史
associated-pages
页面
讨论
更多操作
←
使用搬瓦工api监控网络流量的使用并telegrambot通知
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
== 使用前 == === 获取veid和apikey === 请参考 [[搬瓦工api使用]] === 获取telegramBOT和bot token和chat_id === '''<big>同样需要保存好bot token和chat_id</big>''' '''<big>同样需要保存好bot token和chat_id</big>''' '''<big>同样需要保存好bot token和chat_id</big>''' ==== bot token ==== 在telegram搜索框搜索 botfather 找到如图的这位 [[File:Botfather.png|border]] 点击打开 如果你没有任何机器人的话 点击<code>create a new bot</code> [[File:Createtelegrambot.png|border]] [[File:Createtelegrambot1.png|border]] 在这两个地方 输入 <code>Bot Name</code> bot的名字用于显示 和 <code>username_bot</code> 搜索bot时用的 其中<code>username_bot</code> 必须是bot结尾 比如 abot或者a_bot 输入后 显示是绿色的文本提示(你的username_bot名字 is available)就可以按<code>create bot</code>了 [[File:Createtelegrambot2.png|border]] [[File:Createtelegrambot3.png|border]] 创建好后按copy 就复制bot token了 马赛克区域(绿色框)可以点一下 就可以显示bot token (不要给别人看...) 如果你有bot 选择一个你要推送消息的bot 就会跳到上面这个页面 直接点copy就可以复制bot token了 ==== '''chat_id''' ==== 需要先获取bot token [[File:Createtelegrambot3.png|border]] 点击bot的username_bot名字的位置 就是黄色框框 [[File:Botinfo.png|border]] 弹出界面 选 蓝色框框的图标 [[File:Telegramstart.png|border]] 打开这个页面 选择 '''开始''' 然后用浏览器打开 <nowiki>https://api.telegram.org/bot替换成你复制的bottoken/getUpdates</nowiki> 把 '''替换成你复制的bottoken''' 这几个字删掉 然后粘贴copy的token 就可以了 [[File:Webgettelegramchatid.png|border]] 在chat后面跟着的这个id就是你的chat_id了 == 配置检测脚本 == === '''切换到root账户''' === * 输入命令:<code>su -</code>''(注意:su 后面有个空格和减号,这很重要,代表同时切换环境变量)'' * 输入 Root 密码(输入时看不见)。 * 此时你的提示符会变成 <code>#</code>,代表你又是 Root 了。 [[File:Su-.png|border]] === 服务器脚本 === '''veid和api_key''' VEID="你的veid" API_KEY="你的api_key" '''通知telegram的阈值数组 (百分比)''' NOTIFY_THRESHOLDS=(50 80 90 95) 默认在50 80 90 95的时候通知 每一个数代表一个超过就通知的百分比你可以添加(30 50 80 90 95) 每个中间要有空格 也可以减少 比如(50 95) '''Telegram 配置''' TG_BOT_TOKEN="你的机器人token" TG_CHAT_ID="你的telegram ID" 设定telegram静音推送的开始时间和结束时间 (使用 UTC 小时 0-23) 北京时间 19:00 - 08:00 对应 UTC 11:00 - 00:00 '''静音开始时间''' SILENT_UTC_START=11 '''静音结束时间''' SILENT_UTC_END=0 '''如果你明白以下内容也可以修改''' '''存储目录''' STORAGE_DIR="$HOME/.cache/bwg_monitor" '''缓存数据存放的文件''' DATA_FILE="$STORAGE_DIR/usage_data.json" '''日志存放文件''' LOG_FILE="$STORAGE_DIR/monitor.log" '''日志超过多少就删除''' LOG_MAX_LINES=500 ==== 检查文件是否存在 ==== 输入 <code>ls /root/bwg_monitor.sh</code> [[File:Checkfile1.png|border]] 如果是红色框框 就是'''文件已经存在'''你就换个名字比如 /root/bwg_monitor1.sh 如果改了文件名 下面的这个就都要改成 /root/bwg_monitor1.sh 如果是蓝色框框 就是'''文件不存在''' 就不用改 修改后 复制代码块的所有内容 粘贴到ssh里面 按回车就行了 脚本代码块:<syntaxhighlight lang="bash"> cat << 'EOF' > /root/bwg_monitor.sh #!/bin/bash # ================= 配置区 ================= VEID="你的veid" API_KEY="你的api_key" # 预警阈值数组 (百分比) NOTIFY_THRESHOLDS=(50 80 90 95) # Telegram 配置 TG_BOT_TOKEN="你的机器人token" TG_CHAT_ID="你的telegram ID" # (使用 UTC 小时 0-23) 北京时间 19:00 - 08:00 对应 UTC 11:00 - 00:00 SILENT_UTC_START=11 SILENT_UTC_END=0 STORAGE_DIR="$HOME/.cache/bwg_monitor" DATA_FILE="$STORAGE_DIR/usage_data.json" LOG_FILE="$STORAGE_DIR/monitor.log" LOG_MAX_LINES=500 # ========================================== mkdir -p "$STORAGE_DIR" # 增强型 JSON 提取函数 (无需 jq, 适配各种空格格式) get_json_num() { echo "$1" | grep -o "\"$2\":[^,}]*" | sed 's/.*://;s/[ "]*//g' } log_message() { local msg="$1" local timestamp=$(date '+%Y-%m-%d %H:%M:%S') echo "$timestamp $msg" >> "$LOG_FILE" # 自动清理旧日志 if [ $(wc -l < "$LOG_FILE") -gt "$LOG_MAX_LINES" ]; then sed -i "1,$((LOG_MAX_LINES/2))d" "$LOG_FILE" echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] 日志已自动减半清理。" >> "$LOG_FILE" fi } send_tg_msg() { local message="$1" local is_test_mode="$2" local silent_param="" # 获取当前 UTC 小时 local current_utc_hour=$(date -u +%H) current_utc_hour=$((10#$current_utc_hour)) # --- 跨午夜逻辑判断 --- local is_silent=false if [ "$SILENT_UTC_START" -lt "$SILENT_UTC_END" ]; then # 情况 A: 时间段不跨越午夜 (如 10:00-18:00) if [ "$current_utc_hour" -ge "$SILENT_UTC_START" ] && [ "$current_utc_hour" -lt "$SILENT_UTC_END" ]; then is_silent=true fi else # 情况 B: 时间段跨越午夜 (如 11:00-00:00) if [ "$current_utc_hour" -ge "$SILENT_UTC_START" ] || [ "$current_utc_hour" -lt "$SILENT_UTC_END" ]; then is_silent=true fi fi [ "$is_silent" = true ] && silent_param="-d disable_notification=true" # 执行发送 local res=$(curl -s -X POST "https://api.telegram.org/bot$TG_BOT_TOKEN/sendMessage" \ -d "chat_id=$TG_CHAT_ID" \ $silent_param \ -d "text=$message") if [[ "$res" == *"\"ok\":true"* ]]; then if [[ "$is_test_mode" == "-t" ]]; then echo "✅ Telegram 发送成功! (静音模式: $is_silent)" else log_message "[SUCCESS] Telegram 预警已送达 (静音: $is_silent)。" fi return 0 else if [[ "$is_test_mode" == "-t" ]]; then echo "❌ Telegram 错误: $res" else log_message "[ERROR] Telegram 失败: $res" fi return 1 fi } # --- 处理测试参数 -t --- if [[ "$1" == "-t" ]]; then echo "--- 正在进入模拟测试模式 ---" # 模拟输入值 MOCK_PLAN=2147483648000 MOCK_USED=77207619653 MOCK_MULT=1 # 模拟重置时间:当前时间 + 1天 (86400秒) MOCK_NEXT_RESET=$(($(date +%s) + 86400)) # 计算逻辑 M_PLAN_KB=$(( MOCK_PLAN * MOCK_MULT / 1024 )) M_USED_KB=$(( MOCK_USED * MOCK_MULT / 1024 )) M_USAGE_PERCENT=$(( M_USED_KB * 100 / M_PLAN_KB )) M_USED_GB=$(( M_USED_KB / 1024 / 1024 )) M_TOTAL_GB=$(( M_PLAN_KB / 1024 / 1024 )) M_RESET_DATE=$(date -d @"$MOCK_NEXT_RESET" '+%Y-%m-%d %H:%M') TEST_MSG="🔔 搬瓦工监控模拟测试 当前进度: $M_USAGE_PERCENT% 已用流量: ${M_USED_GB} GB 总量配额: ${M_TOTAL_GB} GB 下次重置: $M_RESET_DATE ------------------ 如果收到此消息,说明 Bot 配置与计算逻辑正常。" echo "计算结果: 已用 $M_USAGE_PERCENT% ($M_USED_GB/$M_TOTAL_GB GB)" if send_tg_msg "$TEST_MSG"; then echo "✅ 测试成功!请检查 Telegram。" else echo "❌ 测试失败!请检查 Token/ID 或网络连接。" fi echo "--- 测试结束 (数据未保存) ---" exit 0 fi # --- 正式运行逻辑 --- RESPONSE=$(curl -s -X POST "https://api.64clouds.com/v1/getServiceInfo" -d "veid=$VEID" -d "api_key=$API_KEY") ERROR_CODE=$(get_json_num "$RESPONSE" "error") if [[ "$ERROR_CODE" != "0" ]]; then log_message "[ERROR] API 请求失败: $RESPONSE" exit 1 fi # 提取关键数据 PLAN=$(get_json_num "$RESPONSE" "plan_monthly_data") USED=$(get_json_num "$RESPONSE" "data_counter") MULT=$(get_json_num "$RESPONSE" "monthly_data_multiplier") NEXT_RESET=$(get_json_num "$RESPONSE" "data_next_reset") # 转换 KB 预防 32 位溢出 PLAN_KB=$(( PLAN * MULT / 1024 )) USED_KB=$(( USED * MULT / 1024 )) USAGE_PERCENT=$(( USED_KB * 100 / PLAN_KB )) # 读取历史数据 HIST_NOTIFIED=$(get_json_num "$(cat "$DATA_FILE" 2>/dev/null || echo '{"notified_level":-1}')" "notified_level") HIST_RESET_TS=$(get_json_num "$(cat "$DATA_FILE" 2>/dev/null || echo '{"last_check_ts":0}')" "last_check_ts") # 跨周期重置 if [[ "$NEXT_RESET" != "$HIST_RESET_TS" ]]; then HIST_NOTIFIED=-1 log_message "[INFO] 进入新计费周期。" fi FINAL_NOTIFY_LEVEL=$HIST_NOTIFIED for level in "${NOTIFY_THRESHOLDS[@]}"; do if [ "$USAGE_PERCENT" -ge "$level" ] && [ "$level" -gt "$HIST_NOTIFIED" ]; then USED_GB=$(( USED_KB / 1024 / 1024 )) TOTAL_GB=$(( PLAN_KB / 1024 / 1024 )) RESET_DATE=$(date -d @"$NEXT_RESET" '+%Y-%m-%d %H:%M') MSG="🚨 搬瓦工流量预警 进度: $USAGE_PERCENT% 已用: ${USED_GB} GB 总量: ${TOTAL_GB} GB 重置日期: $RESET_DATE" if send_tg_msg "$MSG"; then FINAL_NOTIFY_LEVEL=$level log_message "[SUCCESS] 发送 $level% 通知。" fi fi done # 保存状态 echo "{\"total_usage_kb\":$USED_KB,\"last_check_ts\":$NEXT_RESET,\"notified_level\":$FINAL_NOTIFY_LEVEL}" > "$DATA_FILE" log_message "[INFO] 检查完毕: $USAGE_PERCENT%" EOF </syntaxhighlight> ==== 授予执行权限 ==== 输入 <code>chmod +x /root/bwg_monitor.sh</code> 然后输入 <code>ls -l /root/bwg_monitor.sh</code> 如果像蓝色框框 有x就说明有执行权限了 如果是红色的-就说明还没执行的权限[[File:Chmod1.png|border]] ==== 测试telegram推送 ==== 输入 <code>/root/bwg_monitor.sh -t</code> [[File:Telegramsend.png|border]] [[File:Telegramtest.png|border]] 如下是失败了 你的bot token或 chat_id 不正确 [[File:Telegramsenderror.png|border]] 正常就可以配置开机自动启动了 === 配置开机自动启动 === === 第一步:创建 Service 文件 === 这个文件告诉系统“要运行什么”。 这里你也可以去 <code>ls /etc/systemd/system/bwg-monitor.service</code> 检查一下这个文件是否存在防止被覆盖... 但一般不会有吧.... 如果存在就 把 <code>/etc/systemd/system/bwg-monitor.service</code>改成<code>/etc/systemd/system/bwg-monitor1.service</code>之类的 只改最后一个/ 后面 和 . 之前的 就是 /etc/systemd/system/这里可以修改.service 如果你修改了 下面的也要改 并且要一样才行 替换你的实际文件名和路径 ExecStart=/bin/bash /root/bwg_monitor.sh 如果你上面没改 那就这样就行 bwg_monitor.sh 是你的文件名 /root/ 代表是 / 目录下的 root 目录 下的 bwg_monitor.sh 文件<syntaxhighlight lang="bash"> cat << 'EOF' > /etc/systemd/system/bwg-monitor.service [Unit] Description=BandwagonHost Traffic Monitor Service After=network.target [Service] Type=oneshot # 替换为你的实际文件名 ExecStart=/bin/bash /root/bwg_monitor.sh EOF </syntaxhighlight> === 第二步:创建 Timer 文件 === 这个文件告诉系统“什么时候运行”。 <code>/etc/systemd/system/bwg-monitor.timer</code>同上你可以检查一下 如果你修改了文件名 需要注意的是 两个文件名的名字需要一致 <code>bwg-a.timer</code> <code>bwg-a.service</code> .timer和.service 之前的那个文件名 有几个可以修改的地方 <nowiki>#</nowiki> 开机后 2 分钟开始第一次执行 OnBootSec=2min <nowiki>#</nowiki> 之后每隔 1 小时执行一次 OnUnitActiveSec=1h <nowiki>#</nowiki> 如果关机错过了时间,开机后立刻补跑 Persistent=true<syntaxhighlight lang="bash"> cat << 'EOF' > /etc/systemd/system/bwg-monitor.timer [Unit] Description=Run BandwagonHost Traffic Monitor every hour [Timer] # 开机后 2 分钟开始第一次执行 OnBootSec=2min # 之后每隔 1 小时执行一次 OnUnitActiveSec=1h # 如果关机错过了时间,开机后立刻补跑 Persistent=true [Install] WantedBy=timers.target EOF </syntaxhighlight> === 第三步:启动并激活 === 在终端执行以下命令:<syntaxhighlight lang="bash"> # 重新加载配置 systemctl daemon-reload # 启动定时器并设置为开机自启 systemctl enable --now bwg-monitor.timer # 查看定时器状态 systemctl status bwg-monitor.timer </syntaxhighlight>[[File:Systemctlstatusbwg.png|border]] 蓝色框框说明是定时器已经正常运行 红色框框是已经开启了 自动开机启动 绿色的框框代表service正在等待 只要不是红色的就行了 === 缓存和日志的存储位置 === 在 默认位置在 '''$HOME/.cache/bwg_monitor/''' 如果你是按照本文来的那$HOME就是/root 完整路径就是 '''/root/.cache/bwg_monitor/''' [[File:Store.png|border]] monitor.log是执行过程记录的日志 usage_data.json是缓存信息 如果需要重复测试的话 需要删除usage_data.json缓存信息 如果你按照本文的来的话切换了root账户 就输入 <code>rm /root/.cache/bwg_monitor/usage_data.json</code> 如果你不是root账户的话 就用这个 <code>rm $HOME/.cache/bwg_monitor/usage_data.json</code> 如果出现错误和非预期情况请检查 <code>cat $HOME/.cache/bwg_monitor/monitor.log</code>的信息 [[Category:500 常见应用指南 — Application Guides]]
返回
使用搬瓦工api监控网络流量的使用并telegrambot通知
。
查看“︁使用搬瓦工api监控网络流量的使用并telegrambot通知”︁的源代码
来自md5.pw