for i in 1 2 3; do
  curl -fsS --max-time 20 $API && break
  sleep $((i * 30))
done || echo failed | mail -s 'job failed' ops@example.com

任务调用第三方接口偶发超时 第一次失败就把错误邮件发出来 人工重跑一次又成功了 一天下来收了几十封无效告警。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:脚本里一次失败就 exit 1 中间没有任何重试 告警又直接挂在退出码上 瞬时网络抖动被当成真故障 值班的人很快对告警麻木 真出事反而没人看。

「定时任务失败重试」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

处理上按这个顺序:对可重试的错误码做限定 业务校验失败不要重试;重试三次并做指数退避 每次间隔比上一次翻一倍;三次都失败再发告警 邮件里附上本次的原始错误。

确认没问题再收工,接口抖动的时段没有告警 真失败时邮件里能看到三次重试的报错。

作者 9823189