如何在shell中编写重试逻辑

时间:2014-05-23 13:09:23

标签: shell hadoop scripting

我需要执行命令result=$(elastic-mapreduce --jobflow $JOBFLOW --list)并返回结果。我需要检查结果是否存在字符串“PENDING”或“WAITING”或“RUNNING”,如果存在,我需要再次重试相同的命令,直到我看不到“PENDING”,“WAITING”或“跑步“

如何使用bash脚本实现这种功能。

1 个答案:

答案 0 :(得分:0)

我会写:

shopt -s extglob
while :; do
    result=$(elastic-mapreduce --jobflow $JOBFLOW --list)
    [[ $result == +(*RUNNING*|*PENDING*|*WAITING*) ]] || break
    # do you need a delay here?
    sleep 10
done
echo "result now has no RUNNING or PENDING or WAITING"

:命令是一个shell内置函数,用于计算其参数(如果有),只返回“true”状态。
在这里阅读模式匹配:http://www.gnu.org/software/bash/manual/bashref.html#Pattern-Matching