
#!/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
Estou tentando escrever um script que monitore um log e, ao combinar uma palavra-chave, ele disparará alguns comandos.
O problema é que o que juntei funcionará apenas uma vez, depois sairá e interromperá o monitoramento.
Eu adicionei "head -1" ao grep, porque quero que ele seja executado apenas após a primeira palavra-chave e evite que ele seja executado várias vezes caso várias palavras-chave apareçam no final do log. Então, basicamente, se várias palavras-chave aparecerem no final, quero que ele seja executado na primeira palavra-chave, ignore o restante das palavras-chave, execute os scripts listados e volte a monitorar o final do log.
Eu preferiria que o script permanecesse ativo depois de corresponder a uma palavra-chave e continuar monitorando o final do log em busca de novas palavras-chave que possam ser registradas.
Qualquer conselho é muito apreciado. Obrigado!
Responder1
Eu recomendo que você use o loop infinito se quiser continuar monitorando e apenas adicione e durma dentro do seu shell para informar quanto tempo precisa passar para monitorar novamente, se você estiver usando o shell bash, seria algo assim:
#!/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