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
相关产品推荐
相关产品推荐

