
#!/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
Estoy intentando escribir un script que monitorea un registro y, al hacer coincidir una palabra clave, activará algunos comandos.
El problema es que lo que he reconstruido funcionará sólo una vez, luego saldrá y dejará de monitorear.
Agregué "head -1" a grep, porque quiero que esto se ejecute solo después de la primera palabra clave y evitar que se ejecute varias veces si aparecen varias palabras clave al final del registro. Entonces, básicamente, si aparecen varias palabras clave en la cola, quiero que se ejecute en la primera palabra clave, ignore el resto de las palabras clave, ejecute los scripts enumerados y luego vuelva a monitorear la cola del registro.
Preferiría que el script permanezca activo después de que coincida con una palabra clave y continuar monitoreando el final del registro para detectar cualquier palabra clave nueva que pueda registrarse.
Cualquier consejo es muy apreciado. ¡Gracias!
Respuesta1
Te recomendaría que uses un bucle infinito si quieres que siga monitoreando y simplemente agregue y duerma dentro de tu shell para decirles cuánto tiempo debe pasar para monitorear nuevamente, si estás usando bash shell sería algo como esto:
#!/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