쉘 스크립트로 재시도

4198 단어 ShellScript재시도

재시도 처리란?



항상 성공이라고는 할 수 없는 처리에 대해서, 시간 간격을 열어 다시 한번 같은 처리를 실행하는 시도. 시간을 어긋나면 성공할 수 있는 처리에 대해 수행된다.

재시도 처리가 필요한 예는 다음과 같습니다.
  • 일부 API가 시간 단위로 요청 수를 제한하는 경우
  • 자원 부족으로 처리가 중단되는 경우가 있습니다.

    실제 이용 사례


  • BigQuery의 bq load를 병렬 처리했지만 RateLimited에 걸리므로 시간이 지남에 따라 재 시도하고 싶습니다
  • 스크래핑 코드를 이동했지만 네트워크가 안정적이지 않으므로 성공하거나 실패 할 수 있으므로 성공할 때까지 다시 시도하고 싶습니다.

    코드



    콘솔이 색상 제어를 지원하는 경우,
    #!/bin/sh
    set -eu
    
    ESC=$(printf '\033')
    TAB=$(printf '\011')
    RED="${ESC}[31m"
    GREEN="${ESC}[32m"
    YELLOW="${ESC}[33m"
    NORMAL="${ESC}[0m"
    
    retryable() {
        (
            i=0 MAX_RETRY=10
            COMMAND="$@"
            while [ $((i+=1)) -le $MAX_RETRY ]; do
                eval "$COMMAND" && printf "[${GREEN}success${NORMAL} $i/$MAX_RETRY]${TAB}$COMMAND\n" && break
                printf "[${RED}retry${NORMAL} $i/$MAX_RETRY]${TAB}$COMMAND\n"
                sleep 1
            done
            return $?
        )
    }
    
    # 使い方(retryable の後ろにコマンドを書く)
    retryable printf "hello world"
    

    표시 예



  • 좋은 웹페이지 즐겨찾기