스크립트에서 CURL 명령을 한 번만 실행하시겠습니까?

스크립트에서 CURL 명령을 한 번만 실행하시겠습니까?

설명하자면, 현재 폴더에 변경 사항이 있는지 모니터링하고 있으며 변경 사항이 감지되면 감지된 파일을 rsync를 통해 내 서버에 업로드하기만 하면 됩니다. 이것은 아무런 문제 없이 작동합니다:

#!/bin/bash
time_stamp=$(date +"%B-%d-%Y")
inotifywait -mr /usr/lib/unifi-video/data/videos -e create -e moved_to |
  while read path action file; do
  echo "The file '$file' appeared in directory '$path' via '$action'"
  rsync -avz -e "ssh -p 221" /$path/$file [email protected]:~/"$time_stamp"/ 
done

여기에서 대부분의 스크립트를 찾았습니다.폴더에서 새 파일을 감시하는 스크립트?

문제: 위의 스크립트에 다음 CURL 라인을 추가하려고 시도했지만 여러 파일이 동시에 감지되므로 CURL 라인도 여러 번 실행됩니다. 여러 파일이 감지될 때 CURL 줄이 여러 번 실행되는 것을 방지하는 방법을 찾으려고 합니다.

curl http://textbelt.com/text -d number=XXXXXXX -d "message=Motion Detected";

rsync 명령 아래에 새 줄로 직접 추가하고 rsync 명령 뒤에 &&를 사용해 보았습니다. 두 방법 모두 CURL 명령을 여러 번 실행합니다.

내가 시도한 것의 예:

#!/bin/bash
time_stamp=$(date +"%B-%d-%Y")
inotifywait -mr /usr/lib/unifi-video/data/videos -e create -e moved_to |
  while read path action file; do
  echo "The file '$file' appeared in directory '$path' via '$action'"
  rsync -avz -e "ssh -p 221" /$path/$file [email protected]:~/"$time_stamp"/ 
  curl http://textbelt.com/text -d number=XXXXXXX -d "message=Motion Detected";
done

출력 예:

The file 'test30' appeared in directory '/usr/lib/unifi-video/data/videos/' via 'CREATE'
sending incremental file list

sent 39 bytes  received 11 bytes  20.00 bytes/sec
total size is 0  speedup is 0.00

{
"success": true
}

The file 'test31' appeared in directory '/usr/lib/unifi-video/data/videos/' via 'CREATE'
sending incremental file list

sent 39 bytes  received 11 bytes  20.00 bytes/sec
total size is 0  speedup is 0.00

{
 "success": true
}

두 개의 "성공" 줄은 각 감지 및 업로드 후에 CURL 명령이 두 번 실행되었음을 나타냅니다.

정보를 추가하는 것을 잊었다면 알려주세요...

답변1

모든 업데이트를 실행하는 rsync것도 낭비입니다. 다음 스크립트는 마지막 이벤트 이후 0.1초 동안 활동이 없을 때 rsync한 번 실행됩니다.curl

#!/bin/bash
time_stamp=$(date +"%B-%d-%Y")
inotifywait -mr /usr/lib/unifi-video/data/videos -e create -e moved_to |
while true; do
  T=''
  while read $T path action file; do
    echo "The file '$file' appeared in directory '$path' via '$action'"
    T='-t 0.1'
  done
  rsync -avz -e "ssh -p 221" /usr/lib/unifi-video/data/videos/ [email protected]:~/"$time_stamp"/ 
  curl http://textbelt.com/text -d number=XXXXXXX -d "message=Motion Detected"
done

답변2

본 적 있나요?동기화? 올바른 서비스로 실행된다는 점을 제외하면 수동으로 설정하는 것과 거의 동일합니다.

관련 정보