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 中间没有任何重试 告警又直接挂在退出码上 瞬时网络抖动被当成真故障 值班的人很快对告警麻木 真出事反而没人看。
「定时任务失败重试」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
处理上按这个顺序:对可重试的错误码做限定 业务校验失败不要重试;重试三次并做指数退避 每次间隔比上一次翻一倍;三次都失败再发告警 邮件里附上本次的原始错误。
确认没问题再收工,接口抖动的时段没有告警 真失败时邮件里能看到三次重试的报错。
