私のUnixボックスにプロセス名を使用して実行されているアプリケーションサーバーがありますabc_test
。ここで使用する必要があるシェルスクリプトがあります/opt/abc/bin/stop
。時々私のサーバーは停止しないので、私のプロセスがまだ実行中であることを確認する必要があります。実行している場合は、数秒間スリープ状態にして、プロセスがまだ実行中であることを再確認してください。プロセスが5分後に実行され続ける場合は、シェルスクリプトを正常に終了し、プロセスが実行されていない場合でもシェルスクリプトを正常に終了したいと思います。
だから私は以下のスクリプトを思いつきましたが、下のシェルスクリプトにこの5分の項目を追加する方法を理解することはできません。以下のスクリプトは私が望むものを正確に実行しますか?この部分も改善できると思います。
#!/bin/bash
/opt/abc/bin/stop
# Wait for 10 second
sleep 10
# Number of seconds to wait
WAIT_SECONDS=300
# Counter to keep count of how many seconds have passed
count=0
while pgrep abc_test > /dev/null
do
echo "server is still running."
# Wait for one second
sleep 1
# Increment the second counter
((count++))
# Has the process been killed? If so, exit the loop.
if ! pgrep abc_test > /dev/null ; then
break
fi
# Have we exceeded $WAIT_SECONDS? If so exit the loop
if [ $count -gt $WAIT_SECONDS ]; then
break
fi
done
ベストアンサー1
/opt/abc/bin/stop
スクリプトがブロックされないと仮定すると、うまくいくようです。
〜のようにムル$count
変数をスキップして組み込みを使用することをお勧めします$SECONDS
。これにより、次のコードが生成されます。
/opt/abc/bin/stop
# Wait for 10 second
sleep 10
# Number of seconds to wait
WAIT_SECONDS=300
while pgrep abc_test > /dev/null
do
echo "server is still running. Seconds: $SECONDS"
# Wait for one second
sleep 1
# Have we exceeded $WAIT_SECONDS? If so exit the loop
if [ $SECONDS -gt $WAIT_SECONDS ]; then
break
fi
done
ブロックされている場合は、/opt/abc/bin/stop
次のようにバックグラウンドで呼び出すだけです。
/opt/abc/bin/stop &