20초 간격으로 5번 명령을 재시도하고 싶습니다. 이 명령을 메소드 매개변수로 전달하고 싶습니다. 어떻게 하나요? 함수가 작성되면 값을 함수에 어떻게 전달합니까?
현재 코드를 매개변수 세트가 있는 함수로 변환하고 싶습니다. 쉘 스크립트에서 이 함수를 어떻게 작성하고 호출합니까?
내 현재 코드는 다음과 같습니다.
trialNumber=0
until [ $trialNumber -ge 5]
do
ssh $USERID@$HOST $SCRIPT_LOCATION/runme.sh # This line is my command and it may very with number of parameters or command itself.
[ $? -eq 0 ] && break
trialNumber=$[$trialNumber+1]
sleep 20
done
(위의 코드는 여러 곳에 삽입되어 있는데 이를 함수로 옮기고 싶습니다.)
답변1
retry() {
trialNumber=$1 delay=$2; shift 2
while [ "$trialNumber" -gt 0 ]; do
"$@" && return
ret=$?
sleep "$delay"
trialNumber=$(($trialNumber - 1))
done
return "$ret"
}
retry 5 20 ssh "$USERID@$HOST" "$SCRIPT_LOCATION/runme.sh"
마지막 것은 sleep
실패할 경우를 대비해 불필요하지만. 다음과 같은 것이 더 나을 수도 있습니다:
retry() {
trialNumber=$1 delay=$2; shift 2
until "$@"; do
ret=$?
trialNumber=$(($trialNumber - 1))
[ "$trialNumber" -gt 0 ] || return "$ret"
sleep "$delay"
done
}
답변2
재시도 명령을 사용하십시오.
~$ retry --times 5 --delay 20 -- ssh $USERID@$HOST $SCRIPT_LOCATION/runme.sh
https://github.com/minfrin/retry
최신 Debian, Ubuntu 및 Nix와 함께 즉시 사용할 수 있습니다.