내가 만난 것은 데몬이 다시 시작된 후 처음 몇 번의 명령 실행 시도에서 2를 반환하고(뒤에 stderr 메시지가 나타남) 모든 것이 제대로 작동했다는 것입니다.
이 오류를 해결하려면 while/do/done/until
some 의 기능을 활용해야 한다고 생각했지만 sleep
흥미로운 부분은 일반 실행으로 얻은 모든 데이터를 가져야 한다는 것입니다.
...
RESULT=$(command param1 param2 2>&1)
SIG=$?
...
command param1 param2
그러면 종료 상태가 2(주어진 값)가 아니고 변수에 STDOUT+STDERR이 있고 도입된 대로 RESULT
변수에 종료 상태가 있을 때까지 반복하는 방법이 있습니까 SIG
?
답변1
outfile=$(mktemp)
while ! command param1 param2 >"$outfile" 2>&1; do
[ "$?" -ne 2 ] && break
sleep 10
done
result=$(<"$outfile")
rm "$outfile"
2
이것은 성공할 때까지 또는 적어도 종료 상태로 a를 반환하지 않을 때까지 명령을 계속해서 반복해서 실행합니다(매번 10초의 지연을 두고) .
명령의 출력은 임시 파일에 기록되고, 루프 후에 파일을 변수로 읽어와 삭제합니다. bash
여기에 쓴 것처럼 변수 비트를 읽으려면 가 필요합니다 .
답변2
until [ "$SIG" != "2" ]; do
command param1 param2
SIG=$?
done
2가 아닌 숫자가 반환될 때까지 매번 명령이 실행됩니다.