如何在Bash脚本中每10分钟对比ID值并触发Telegram通知
解决方案:添加ID定时对比与Telegram通知功能
以下是整合需求后的完整Bash脚本,实现了每10分钟检查ID是否更新,未更新则发送Telegram通知的功能:
#!/bin/bash # 配置Telegram机器人参数 TELEGRAM_BOT_TOKEN="你的机器人Token" TELEGRAM_CHAT_ID="你的目标聊天ID" # 发送Telegram消息的函数 send_telegram() { curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" -d chat_id="$TELEGRAM_CHAT_ID" -d text="$1" } # 替换为你的实际API地址 HOST="https://your-api-endpoint.com" # 首次获取初始ID,作为历史对比值 last_id=$(curl -X GET "$HOST" | jq '.res[0].id | tonumber') echo "初始ID: $last_id" # 记录上次执行检查的时间戳(秒) last_check_timestamp=$(date +%s) # 启动循环 for ((current_loop_id=$last_id; current_loop_id<=999999999; current_loop_id++)) do sleep 10 echo "Start $current_loop_id:" # 计算当前时间与上次检查的时间差 current_timestamp=$(date +%s) time_elapsed=$((current_timestamp - last_check_timestamp)) # 每10分钟(600秒)执行一次ID更新检查 if [ $time_elapsed -ge 600 ]; then # 获取当前最新的ID latest_id=$(curl -X GET "$HOST" | jq '.res[0].id | tonumber') echo "检查ID:当前最新值=$latest_id,历史值=$last_id" # 对比ID是否未更新 if [ $latest_id -eq $last_id ]; then # 发送告警通知 send_telegram "⚠️ ID已10分钟未更新!当前ID:$latest_id" echo "已发送Telegram告警" else # 更新历史ID为最新值 last_id=$latest_id echo "ID已更新,更新后的值:$last_id" fi # 重置检查时间戳为当前时间 last_check_timestamp=$current_timestamp fi done
关键逻辑说明:
- 参数配置:先填写Telegram的机器人Token和聊天ID,确保通知能正常发送;同时替换
HOST为你的实际API地址。 - 初始值初始化:脚本启动时先获取一次ID作为历史对比基准,同时记录当前时间戳用于后续间隔计算。
- 定时检查:通过时间戳计算间隔,每累计满10分钟就触发一次ID检查,不影响原脚本的10秒循环逻辑。
- ID对比与通知:检查时重新拉取最新ID,和历史值对比,若相等则调用
send_telegram发送告警;若更新则同步历史值。 - 脚本规范:使用
$()替代反引号执行命令,变量引用添加双引号避免空格问题,数值比较用-eq保证正确性。
内容的提问来源于stack exchange,提问作者Yuliya M
相关产品推荐
相关产品推荐

