重试Unix Shell脚本中以下代码的逻辑

时间:2020-08-27 11:37:59

标签: bash unix

请帮助我解决一个unix shell脚本要求。

我们有一个unix作业,由于以下错误而总是失败

unable to execute os command

,在第二次或第三次重试后,它成功执行。

所以现在我想对下面的代码重试逻辑最多3次,请给出下面的代码示例。

如果首次运行执行成功,则应退出循环,否则应继续重试3次。然后,它应该退出循环并处理剩余的代码。

sqlplus -s / <<EOF
        set serveroutput on size 999999
        set feed off
        set term off
        spool ../logs/$PROGRAM.log3
        execute $PROGRAM;
EOF
 

1 个答案:

答案 0 :(得分:1)

您可以这样做

iteration=0 
limit=3 
seconds_in_wait=10 

while [[ $iteration -le $limit ]];
do

sqlplus -s / <<EOF
        whenever sqlerror exit 99;
        set serveroutput on size 999999
        set feed off
        set term off
        spool ../logs/$PROGRAM.log3
        execute $PROGRAM;
EOF

if [[ $? -eq 99 ]];
then 
    if [[ $iteration -eq $limit ]];
    then 
        echo "Maximum times allowed - Error"
        exit 2;
    else
        iteration = $(expr $iteration + 1)
        sleep $seconds_in_wait 
    fi 
else
    iteration=$(expr $limit + 1)
fi 

done
  • 在示例3中,您定义了迭代限制
  • 如果该过程失败,请等待几秒钟,然后重试
  • 如果该过程失败并且达到了限制,则错误退出
  • 如果没有失败,则退出循环