私のプロセス名は です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
。 見つからない場合は、スクリプトを終了します。 見つからない場合は、sleep
10 分間待機します。
終了しなかった場合、 はpgrep
成功しました。つまり、 ですecho success
。