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

RunDeck中Bash脚本触发错误后活动页签多条失败记录的解决问询

问题

在RunDeck的Bash脚本中,我通过以下代码触发Linux错误以导致任务执行失败:

CODE=`echo $RESULT | head -n1 | cut -c2`
if [ $CODE != '0' ];
then
    exit 1
fi

奇怪的是,活动页签中出现了4条失败记录而非1条(见附图)。我尝试在exit 1上方添加sleep 20后,仅生成了1条记录。推测exit 1执行后RunDeck仍有进程在运行,导致持续添加记录。请问如何等待所有进程完成,使活动页签仅显示1条记录?

完整脚本定义如下:

#!/bin/bash

set –e

URL="https://my_url"

MY_COMMAND="command_name"

RAW_DATA="[null,\"${MY_COMMAND}\",{}]"
echo "Raw Data ${RAW_DATA}"

RESULT=$(curl "$URL/${MY_COMMAND}" \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -H 'User-Agent: my_user_agent' \
    --data-raw $RAW_DATA)
    
echo $RESULT

CODE=`echo $RESULT | head -n1 | cut -c2`
if [ $CODE != '0' ];
then
    exit 1
fi

任务定义(YAML)如下:

- defaultTab: output
  description: JOB_DESCRIPTION
  executionEnabled: true
  id: 125cb755-3eaa-49f8-a8b8-dc1004238a44
  loglevel: INFO
  loglimit: 10MB
  loglimitAction: truncate
  loglimitStatus: failed
  name: JOB_NAME
  nodeFilterEditable: false
  notification:
    onfailure:
      email:
        attachLog: true
        attachLogInFile: true
        recipients: someone@mail.com
  notifyAvgDurationThreshold: null
  plugins:
    ExecutionLifecycle: {}
  retry: '3'
  schedule:
    dayofmonth:
      day: '*'
    month: '*'
    time:
      hour: '04'
      minute: '05'
      seconds: '0'
    year: '*'
  scheduleEnabled: true
  schedules: []
  sequence:
    commands:
    - script: "#!/bin/bash\n\n"
    keepgoing: false
    strategy: node-first
  timeout: 1h
  uuid: 125cb755-3eaa-49f8-a8b8-dc1004238a44
解决方案

1. 关闭任务自动重试(核心原因)

你的任务YAML配置中retry: '3',这意味着任务失败后会自动重试3次,加上初始执行的1次,正好生成4条失败记录。把重试次数改为0即可解决多条记录问题:

retry: '0'

2. 确保脚本子进程完全结束

如果关闭重试后仍有异常,可在exit 1前添加wait命令,等待所有子进程执行完毕再退出:

# 在exit 1前插入
wait
exit 1

另外,给curl命令添加超时参数,避免它因网络问题挂起:

RESULT=$(curl "$URL/${MY_COMMAND}" \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -H 'User-Agent: my_user_agent' \
    --data-raw "$RAW_DATA" \
    --connect-timeout 10 \
    --max-time 30)

3. 修正脚本的set -e语法错误

脚本开头的set –e用了全角破折号,会导致该命令失效。set -e的作用是让脚本在任意命令失败时立即退出,修正为半角破折号才能生效:

#!/bin/bash

set -e  # 替换原全角破折号

4. 清理任务中的冗余脚本配置

任务YAML的sequence.commands里有一个空的script: "#!/bin/bash\n\n",这可能导致不必要的重复执行。确认任务配置,确保只执行目标脚本,避免额外的进程触发记录。

内容的提问来源于stack exchange,提问作者gogagubi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:05:16