
#!/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