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

監視を継続するには、無限ループを使用してシェルに追加し、休止状態に切り替えて、再監視する前に経過する時間を教えてください。 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

おすすめ記事