
#!/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
로그를 모니터링하는 스크립트를 작성하려고 하는데 키워드가 일치하면 일부 명령이 실행됩니다.
문제는 내가 조합한 것이 한 번만 작동한 다음 종료하고 모니터링을 중지한다는 것입니다.
grep에 "head -1"을 추가했습니다. 첫 번째 키워드 이후에만 이 명령이 실행되도록 하고 로그 꼬리에 여러 키워드가 나타날 경우 여러 번 실행되는 것을 방지하기 때문입니다. 그래서 기본적으로 꼬리에 여러 개의 키워드가 나타나면 첫 번째 키워드에서 실행하고 나머지 키워드는 무시하고 나열된 스크립트를 실행한 다음 다시 로그의 꼬리 모니터링으로 돌아가기를 원합니다.
키워드와 일치한 후에도 스크립트가 활성 상태를 유지하고 기록될 수 있는 새 키워드에 대해 로그 끝 부분을 계속 모니터링하는 것을 선호합니다.
어떤 조언이라도 대단히 감사하겠습니다. 감사합니다!
답변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