iTunes自动提取循环重试直到成功

时间:2013-10-19 09:15:43

标签: bash if-statement while-loop itunesconnect

您好!现在我的脚本在下面工作,但不是我想要的方式。首先,我必须为一段代码执行“set + e”,否则脚本将在第一个错误时退出。

有时,当我的脚本运行时,他们的报告还没有准备好。因此,没有文件可以从$ temp_dir目录移动。这是退出状态1错误。

如何使脚本的行为如下:

  • 在退出状态1(或者如果文件不存在哪个是更好的错误捕获前提),等待/睡眠20分钟然后尝试再次下载报告并将其移动到$ temp_dir目录。
  • 当退出状态为0(成功)或文件存在时,请移至$ temp_dir目录,然后继续执行其余脚本。我想这是它将脱离循环的地方。
  • 最多重试次数为5次,每次重试次数为20分钟。如果达到最大重试次数,请退出循环并退出脚本,然后返回错误或发送错误的电子邮件通知。

    #! /bin/bash
    ...
    
    set +e
    java Autoingestion autoingestion.properties ${VENDOR_ID} Sales Daily Summary ${REPORT_DATE}
    mv ${BASE_FILENAME} ${temp_dir}
    
    # File or directory not found from moving, so exit status should be 1.
    echo "Exit status " $?
    while [[ $? -ne 0 ]] & [[ ${RETRY} -lt 6 ]]; do
        sleep 1200
        printf "\n"
        echo "Retrying download attempt #${RETRY} out of 5"
        java Autoingestion autoingestion.properties ${VENDOR_ID} Sales Daily Summary ${REPORT_DATE}
        mv ${BASE_FILENAME} ${temp_dir}
        if [ $? -eq 0 ]; then
                echo "Download retry successful!"
                mv ${BASE_FILENAME} ${temp_dir}
                break; # Skip entire loop
        fi
        let RETRY=RETRY+1
    done
    set -e
    printf "\n"
    

    基本上,这是试图说'如果第一次尝试失败,等待20分钟再试一次(最多5次)。
    非常感谢您的意见。

  • 1 个答案:

    答案 0 :(得分:0)

    这应该是解决方案:

    while [ $counter -lt 11 ]; do
    download the report
    if [ -f $BASE_FILENAME ]; then
        break;
    else 
        echo "Report unavailable. Retrying in 20 minutes"
        increase counter value by 1
    fi
    done