Execute o comando CURL apenas uma vez no script?

2

Para explicar um pouco, estou atualmente monitorando uma pasta para quaisquer alterações e quando as alterações são detectadas, ele simplesmente faz o upload dos arquivos detectados para o meu servidor via rsync. Isso está funcionando sem problemas:

#!/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

Encontrei a maior parte desse script aqui: Script para monitorar a pasta para novos arquivos?

Pergunta: Eu estou tentando adicionar a seguinte linha CURL ao script acima, mas como vários arquivos estão sendo detectados de uma só vez, ele também está executando a linha CURL várias vezes. Eu estou tentando encontrar um método para evitar que a linha CURL seja executada mais de uma vez quando vários arquivos são detectados?

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

Eu tentei adicioná-lo como uma nova linha diretamente sob o comando rsync, além de usar o & & após o comando rsync. Ambos os métodos executaram o comando CURL várias vezes.

Exemplo do que tentei:

#!/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

Exemplo da saída:

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
}

As duas linhas de "sucesso" mostram que o comando CURL foi executado duas vezes, após cada detecção e upload.

Por favor, deixe-me saber se eu esqueci de incluir qualquer informação ...

    
por user2714959 20.07.2015 / 22:34

2 respostas

4

A execução de rsync em cada atualização também é um desperdício. O script a seguir executa rsync e curl uma vez quando não há atividade por 0,1 segundo desde o último evento.

#!/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
    
por 21.07.2015 / 00:30
3

Você examinou o lsyncd ? É praticamente o mesmo que você configurou manualmente, exceto que ele é executado como um serviço adequado.

    
por 22.07.2015 / 01:45