ログを監視し、キーワードを一致させてコマンドを送信する Bash スクリプト

ログを監視し、キーワードを一致させてコマンドを送信する Bash スクリプト
#!/bin/bash
sudo tail -fn0 /home/main/time.log |
grep -o --line-buffered 'garage\|garden\|porch' | head -1 |
    while read line; do 
sudo pkill -f porch.sh &
sudo pkill -f garage.sh &
done

ログを監視し、キーワードが一致するといくつかのコマンドを実行するスクリプトを作成しようとしています。

問題は、私が組み立てたものが一度しか機能せず、その後は終了して監視を停止することです。

grep に「head -1」を追加しました。これは、最初のキーワードの後に​​のみ実行し、ログの末尾に複数のキーワードが出現した場合に複数回実行されないようにするためです。つまり、基本的に、末尾に複数のキーワードが出現した場合は、最初のキーワードで実行し、残りのキーワードを無視し、リストされているスクリプトを実行してから、ログの末尾の監視に戻るようにします。

スクリプトは、キーワードに一致した後もアクティブなままで、ログに記録される可能性のある新しいキーワードがないかログの末尾を監視し続けることを希望します。

アドバイスをいただければ幸いです。ありがとうございます!

答え1

監視を継続したい場合は無限ループを使用することをお勧めします。シェル内に sleep を追加して、再度監視するまでにどのくらいの時間が経過する必要があるかを伝えます。bash シェルを使用している場合は、次のようになります。

#!/bin/bash
while true
do
   sudo tail -fn0 /home/main/time.log |
   grep -o --line-buffered 'garage\|garden\|porch' | head -1 |
   while read line; do 
      sudo pkill -f porch.sh &
      sudo pkill -f garage.sh &
   done
   sleep 1 #change it for the time you want it to keep it monitoring again
done

関連情報