「autorep」および「sendevent」コマンドはAutosysにのみ適用されますが、私が実行する必要があるスクリプトは次のとおりです。
if autorep -g GLOBAL_VARIABLE |grep " 0 " >/dev/null
then
sendevent -E SET_GLOBAL -G "YES"
else
sleep 2
fi
GLOBAL_VARIABLE = 0 または 20 分までの間にこのスクリプトを繰り返すにはどうすればよいですか。
forループを考えていますが、いくつかのガイドラインが必要です。
autorepコマンドの出力:
Global Name Value Last Changed
________________________________________________________________ ____________________________________________________________________________________________________ ____________________
GLOBAL_VARIABLE Y 12/15/2020 00:00:01
GLOBAL_VARIABLE値がゼロでない場合は、2分間待機してから再試行するスクリプトが必要です。 20分終了時点の値が0でない場合、スクリプトは1で終了する必要があります。
ベストアンサー1
これをループでラップし、while
コマンドが動作しているかどうかをテストするだけでなく、繰り返し回数または経過時間テストも追加します。テスト中のコマンドが正しいと仮定すると、Bashまたは標準シェルで動作します。
#!/bin/sh
elapsed=0
delay=2
timeout=$(( 20 * 60 ))
success=0
while true; do
if autorep -g GLOBAL_VARIABLE |grep " 0 " >/dev/null; then
success=1
break
fi
if [ "$elapsed" -ge "$timeout" ]; then
break
fi
sleep "$delay"
elapsed=$(( elapsed + delay ))
done
if [ "$success" = 1 ]; then
echo "the command succeeded after waiting "$elapsed" seconds"
else
echo "the command never succeeded within '$elapsed' seconds"
fi
delay
単位timeout
は秒なので、20 * 60 = 1200秒は20分です。
睡眠時間だけを考慮したものなので、autorep
完了するのに時間がかかる場合はオフになります。 Bashでは、これを使用して$SECONDS
スクリプトが開始されてからの時間を取得できます。
また、コマンドの出力には正しい位置でない限り、スペースで囲まれたスペースを含めることはできません0
。
... | grep -q "^GLOBAL_VARIABLE[[:space:]]*0 "
GLOBAL_VARIABLE
0で始まる行を確認してください。