실패 시 크론 작업 재시도

실패 시 크론 작업 재시도

리소스를 사용할 수 없을 때 주기적으로 실패하는 cron 작업이 있습니다. 이러한 실패를 처리하는 가장 좋은 방법은 시간을 두고 다시 시도하는 것입니다. 이를 수행하는 가장 좋은 방법은 무엇입니까? 실패한 스크립트는 자체 일정 조정을 사용합니까 at? 더 좋은 방법이 있나요? 아마도 그러한 재시도 인프라가 이미 있을 것입니다.

답변1

서비스가 가능할 때까지 계속해서 재시도를 해야 하기 때문에 이를 위해 전용 툴을 구축했습니다.

https://github.com/minfrin/retry

~$ retry --until=success -- false
retry: 'false' returned 1, backing off for 10 seconds and trying again...
retry: 'false' returned 1, backing off for 10 seconds and trying again...
retry: 'false' returned 1, backing off for 10 seconds and trying again...
^C

최신 Debian, Ubuntu 및 Nix와 함께 즉시 사용할 수 있습니다.

답변2

작업을 실행할 스크립트를 예약합니다. 성공할 때까지 또는 너무 많은 시도가 이루어질 때까지 스크립트에서 작업 실행을 다시 시도하도록 합니다.

이는 를 실행하여 작업이 실행되고 some-command0이 아닌 종료 상태를 반환하여 정상적으로 실패한다고 가정합니다.

#!/bin/sh

sleeptime=15m # Sleep for 15 minutes after a failed try.
maxtries=8    # 8 * 15 minutes = about 2 hours total of waiting,
              # not counting running and failing.

while ! some-command; do
        maxtries=$(( maxtries - 1 ))
        if [ "$maxtries" -eq 0 ]; then
                echo Failed >&2
                exit 1
        fi

        sleep "$sleeptime" || break
done

답변3

at now + 17 minutes그냥 일정을 변경하세요 . 읽다 man at.

크론 자체 내에서 첫 번째 명령이 실패할 경우 일정을 다시 설정할 수 있습니다.

<command> || at now + 17 minutes <command>

at첫 번째 명령이 실패한 경우에만 명령이 다시 예약됩니다. 물론 일정은 한 번만 변경되며 두 번째 실행도 실패하면 다시 실행되지 않습니다.

여기서 유일한 주의 사항은 일부 가시성이 상실된다는 것입니다. 예를 들어 메일이나 크론 로그에서 두 번째 실행 결과를 볼 수 없습니다.

관련 정보