スクリプトを終了する前に、事前定義された時間待ちます。

スクリプトを終了する前に、事前定義された時間待ちます。

私の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 &

おすすめ記事