【问题标题】:Retry logic for below piece of code in Unix shell script重试 Unix shell 脚本中以下代码的逻辑
【发布时间】:2020-12-16 06:56:30
【问题描述】:

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

无法执行操作系统命令

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

所以现在我想为下面的代码重试逻辑最多 3 次,请举例说明下面的代码。

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

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

【问题讨论】:

标签: bash unix


【解决方案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 中
  • 如果该过程失败,请等待几秒钟,然后重试
  • 如果进程失败并且您达到了限制,那么您将退出并出现错误
  • 如果没有失败,则退出循环

【讨论】:

  • 非常感谢 Roberto 的快速帮助,我是 Unix 的初学者,我会将这段代码放在我的脚本中,并在这里告诉你
  • @vijay,谢谢。我更新了答案以对逻辑表达式( -eq , -lt , -le ... )使用相同的语法
猜你喜欢
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 2010-10-06
  • 2010-09-16
  • 2017-08-11
  • 1970-01-01
相关资源
最近更新 更多