Linux运维中脚本失败自动钉钉通知的核心是捕获命令退出状态并调用钉钉Webhook API;需获取Webhook地址、封装dingtalk_alert函数、通过||或trap捕获错误,并建议添加主机名、时间、日志片段及限流机制。

在 Linux 运维中,让脚本执行失败后自动发送钉钉通知,核心是:捕获命令退出状态 + 调用钉钉 Webhook API 发送消息。不需要复杂框架,几行 shell 就能搞定。
1. 获取钉钉机器人 Webhook 地址
登录钉钉群 → 群设置 → 智能群助手 → 添加机器人 → 选择「自定义」→ 复制 Webhook URL(形如 https://oapi.dingtalk.com/robot/send?access_token=xxx)。注意开启「加签」(可选,若开启需额外计算 timestamp + sign)。
2. 编写通用钉钉告警函数
把发消息逻辑封装成函数,方便复用。以下为不启用加签的简洁版:
dingtalk_alert() {
local msg="${1:-'脚本执行失败'}"
local webhook="https://oapi.dingtalk.com/robot/send?access_token=your_access_token_here"
curl -s -X POST "$webhook" \
-H 'Content-Type: application/json' \
-d "{\"msgtype\": \"text\", \"text\": {\"content\": \"[运维告警] $msg\"}}"
}
使用时直接调用:dingtalk_alert "备份任务失败:/data 目录不存在"
3. 在脚本中捕获失败并触发告警
有三种常用方式,推荐最后一种(更健壮):
-
方式一:逐条命令后判断
每条关键命令后加 || dingtalk_alert "命令X失败" -
方式二:用 set -e + ERR trap
开头加 set -e,再用 trap 'dingtalk_alert "脚本在第 $LINENO 行失败"' ERR -
方式三:执行后检查 $?(最清晰可控)
your_command || { dingtalk_alert "your_command 执行失败,退出码 $?" ; exit 1; }
4. 实用增强建议
让通知更有效,可补充这些细节:
- 带上主机名和时间:"$(hostname) | $(date '+%F %T') | 备份失败"
- 附上错误日志片段:"错误详情:$(tail -n 3 /var/log/backup.log 2>/dev/null)"
- 敏感信息脱敏:Webhook 地址不要硬编码,改用环境变量或配置文件读取
- 避免重复轰炸:加简单限流,比如失败后 5 分钟内不再发相同类型告警(可用 touch 文件 + stat 判断)


















