You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Bash脚本无法向Slack频道发送GCP虚拟机超时告警消息

排查与修复GCP虚拟机Slack告警脚本问题

以下是针对你的脚本无法正常发送Slack消息的排查步骤和修复方案:

1. 检查时区匹配问题

脚本中date +%H使用系统默认时区,如果系统时区和你预期的工作时区(比如北京时间)不一致,会导致时间判断逻辑错误:

  • 运行date +%H查看当前系统小时,确认是否处于你设定的告警时段(9点到17点之外)。
  • 若需指定时区,修改小时获取命令,例如使用北京时间:
    hour=$(date +%H -d "Asia/Shanghai")
    

2. 验证Slack Webhook URL文件

  • 执行cat "${script_dir}/slack-hook",确认输出是完整、无多余空格/换行的Slack Webhook URL。如果文件末尾有换行符,会导致URL无效,可修改读取命令去除换行:
    hook=$(tr -d '\n' < "${script_dir}/slack-hook")
    
  • 检查文件权限:运行ls -l "${script_dir}/slack-hook",确保脚本拥有读取权限(权限建议设为644)。

3. 调试curl请求

  • 在脚本中给curl添加-v参数,查看详细请求日志,定位错误原因:
    curl -v -X POST --data-urlencode "payload={\"text\": \"${message}\"}" "${hook}"
    
  • 手动测试curl命令:直接在终端运行以下命令(替换为你的Webhook URL),验证是否能收到消息,排除脚本变量替换问题:
    curl -X POST --data-urlencode 'payload={"text": "Test alert message"}' "你的Slack Webhook URL"
    

4. 增强脚本错误处理

给脚本添加基础错误检查,便于快速定位问题:

#!/usr/bin/env bash

# 指定时区(按需修改)
hour=$(date +%H -d "Asia/Shanghai")
script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

if [[ $hour -gt 17 || $hour -lt 9 ]] ; then
    HOST=$(hostname)
    message="${HOST} is still running. Please make sure to shut it down"
    
    # 读取Webhook并去除换行
    hook=$(tr -d '\n' < "${script_dir}/slack-hook")
    
    # 检查Webhook是否为空
    if [[ -z "$hook" ]]; then
        echo "Error: Slack webhook URL is empty" >&2
        exit 1
    fi

    # 发送请求并检查结果
    curl -X POST --data-urlencode "payload={\"text\": \"${message}\"}" "${hook}"
    if [[ $? -ne 0 ]]; then
        echo "Failed to send Slack alert" >&2
        exit 1
    fi
fi

内容的提问来源于stack exchange,提问作者i'mgnome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:15:36