Скрипт 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

Я пытаюсь написать скрипт, который отслеживает журнал и при совпадении ключевого слова запускает некоторые команды.

Проблема в том, что то, что я собрал, сработает только один раз, после чего закроется и мониторинг прекратится.

Я добавил "head -1" в grep, потому что я хочу, чтобы это выполнялось только после первого ключевого слова и не допускало многократного выполнения, если в конце журнала появляется несколько ключевых слов. Так что, по сути, если в конце журнала появляется несколько ключевых слов, я хочу, чтобы он выполнялся с первого ключевого слова, игнорировал остальные ключевые слова, выполнял перечисленные скрипты, а затем возвращался к мониторингу конца журнала.

Я бы предпочел, чтобы скрипт оставался активным после того, как он сопоставил ключевое слово, и продолжал отслеживать остаток журнала на предмет новых ключевых слов, которые могут быть зарегистрированы.

Любой совет будет оценен по достоинству. Спасибо!

решение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

Связанный контент