
私が遭遇したのは、デーモンが再起動された後に最初の数回のコマンドを実行しようとしたときに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以外の数字が返されるまで、毎回コマンドが実行されます。