シェルで特定のプロセスが 1 時間実行されているかどうかを確認する方法

シェルで特定のプロセスが 1 時間実行されているかどうかを確認する方法

私のプロセス名は ですtest

ps -ef | grep test

プロセスが実行中であることがわかります。これを 1 時間にわたって 10 分ごとにチェックし、1 時間正常に実行されている場合は成功を印刷します。これを行うための最良の方法は何ですか?

答え1

ループを使用できます。ここでは、プロセスが実行中かどうかを確認するためにwhile使用しています。pgrep

#!/bin/bash
counter=0
while :; do
    [ "$counter" -eq 6 ] && break
    if pgrep <process_name> &>/dev/null; then
        echo "Success !!"
        (( counter += 1 ))
        sleep 10m
    else
        echo "Process not running..exiting !!"
        break
    fi
done

<process_name>追跡するプロセスの実際の名前に置き換えます。

答え2

スクリプト内の単純なループ:

#! /bin/bash
start=$SECONDS
while (( SECONDS - start < 3600 ))
do
    sleep 10m
    pgrep -f test &>- || exit
done
echo success

SECONDSは、スクリプトが開始されてからの秒数を含む bash の特別な変数です。pgrep testという名前のプロセスをチェックしますtest。 見つからない場合は、スクリプトを終了します。 見つからない場合は、sleep10 分間待機します。

終了しなかった場合、 はpgrep成功しました。つまり、 ですecho success

関連情報