Bash 스크립트는 로그를 모니터링하고 키워드를 일치시킨 다음 명령을 보냅니다.

Bash 스크립트는 로그를 모니터링하고 키워드를 일치시킨 다음 명령을 보냅니다.
#!/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

관련 정보