설명하자면, 현재 폴더에 변경 사항이 있는지 모니터링하고 있으며 변경 사항이 감지되면 감지된 파일을 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
본 적 있나요?동기화? 올바른 서비스로 실행된다는 점을 제외하면 수동으로 설정하는 것과 거의 동일합니다.