실패할 때까지 셸 명령을 반복적으로 실행하시겠습니까?
믿을 수 없을 정도로 실패하는 애매한 테스트를 써봤어요.디버그 코드를 추가했지만 이제 디버그 출력을 수집할 수 있도록 실패할 때까지 테스트를 실행합니다.
다음을 사용하여 테스트를 실행할 수 있도록 설정했습니다.
./runtest
저의 현재 해결책은 다음을 작성하는 것입니다.untilfail
스크립트:
#!/bin/bash
$@
while [ $? -eq 0 ]; do
$@
done
그런 다음 사용합니다.
untilfail ./runtest
더 간단한 해결책은 없나요?
while
실행할 명령이 필요하므로 간단한 명령을 사용할 수 있습니다.
while ./runtest; do :; done
이렇게 하면 루프가 중지됩니다../runtest
0이 아닌 종료 코드(일반적으로 장애를 나타냄)를 반환합니다.
그러나 현재 솔루션을 더욱 간소화하려면 eilfail 스크립트를 다음과 같이 변경하기만 하면 됩니다.
#!/bin/bash
while "$@"; do :; done
그런 다음 이미 사용하고 있는 명령을 사용하여 호출할 수 있습니다.
untilfail ./runTest --and val1,val2 -o option1 "argument two"
복잡한 파이프 라인을 셸 스크립트 또는 함수로 줄바꿈하지 않으려면 다음과 같이 하십시오.
while true; do
curl -s "https:..." | grep "HasErrors.:true"
if [[ "$?" -ne 0 ]]; then
break
fi
sleep 120
done
이 경우 HTTP 요청은 항상 200을 반환하지만 오류가 있을 때 "HasErrors":true 특성을 가진 일부 JSON을 반환합니다.
명령어는 다음 명령어와 함께 사용할 수도 있습니다.-e
플래그는 오류가 발생할 때까지 명령을 실행한 다음 키를 누를 때까지 출력을 정지합니다.
watch -e ./runtest
시계 사용의 유일한 단점은 실행 사이에 최소 0.1초의 의무 지연이 있다는 것입니다.
watch -e ./runtest -n0.1
와 함께watch
또한 실행 간의 출력 변화를 강조 표시할 수 있습니다().-d
또는 명령 출력이 변경되면 종료합니다( ).-g
).
"재시도"라는 문제를 해결하기 위한 전용 도구를 만들었을 때 셸 재시도 논리가 어디에서나 중복되는 시스템에서 이와 유사한 문제가 발생했습니다.
retry --until=fail ./runtest
더 복잡한 예는 다음과 같습니다.
retry --until=fail --message="test succeeded" --delay=1 ./runtest
이 도구는 https://github.com/minfrin/retry에서 구할 수 있습니다.
Ubuntu에서 다음을 수행합니다.
sudo apt-get install run-one
run-one-until-failure COMMAND [ARGS]
자세한 내용은 https://blog.dustinkirkland.com/2013/09/introducing-run-one-constantly-run-one.html를 참조하십시오.
언급URL : https://stackoverflow.com/questions/12967232/repeatedly-run-a-shell-command-until-it-fails 입니다.
'programing' 카테고리의 다른 글
다양한 MessageBoxImage 또는 MessageBoxIcon의 이미지를 가져오려면 어떻게 해야 합니까? (0) | 2023.04.25 |
---|---|
Kotlin: 목록 캐스팅을 사용하는 방법:선택되지 않은 캐스트: kotlin.collections입니다.kotlin.colutions에 등록합니다.목록입니다. (0) | 2023.04.25 |
UITableView 섹션 헤더의 글꼴 크기를 변경합니다. (0) | 2023.04.25 |
여러 bash 스크립트에서 pushd/popd 스택을 표시하지 않습니다(quiet pushd/popd). (0) | 2023.04.25 |
csv 파일의 열 하나를 추출하는 방법입니다. (0) | 2023.04.25 |