
#!/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
Ich versuche, ein Skript zu schreiben, das ein Protokoll überwacht und bei Übereinstimmung mit einem Schlüsselwort einige Befehle auslöst.
Das Problem ist, dass das, was ich zusammengestückelt habe, nur einmal funktioniert und dann beendet wird und die Überwachung stoppt.
Ich habe „head -1“ zu grep hinzugefügt, weil ich möchte, dass dies nur nach dem ersten Schlüsselwort ausgeführt wird und dass eine mehrfache Ausführung verhindert wird, wenn mehrere Schlüsselwörter am Ende des Protokolls erscheinen. Wenn also mehrere Schlüsselwörter am Ende erscheinen, möchte ich, dass es beim ersten Schlüsselwort ausgeführt wird, die restlichen Schlüsselwörter ignoriert werden, die aufgelisteten Skripts ausgeführt werden und dann zur Überwachung des Endes des Protokolls zurückgekehrt wird.
Ich möchte, dass das Skript aktiv bleibt, nachdem es mit einem Schlüsselwort übereinstimmt, und das Ende des Protokolls weiterhin auf neue Schlüsselwörter überwacht, die möglicherweise protokolliert werden.
Jeder Ratschlag ist willkommen. Vielen Dank!
Antwort1
Ich würde Ihnen empfehlen, eine Endlosschleife zu verwenden, wenn Sie die Überwachung fortsetzen möchten, und einfach „and sleep“ in Ihrer Shell hinzuzufügen, um anzugeben, wie viel Zeit vergehen muss, bis die Überwachung erneut beginnt. Wenn Sie die Bash-Shell verwenden, sähe das etwa so aus:
#!/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