Como faço para acionar o rsync na modificação do arquivo?

8

Eu posso sincronizar pastas com rsync -avz /directory /target , agora eu desejo fazer isso se eu mudei um arquivo em /directory , então rsync deve ser chamado automaticamente.

Estou usando o Virtual Box e a pasta compartilhada do Virtual Box é muito lenta, especialmente se você tiver uma página da Web que esteja usando a pasta compartilhada como raiz do documento. Com rsync i seria capaz de trabalhar com meus arquivos locais na pasta compartilhada e sincronizá-lo automaticamente com a raiz do documento.

Espero que alguém tenha uma idéia de como fazer isso, crontab não seria bom, porque é executado a cada x minutos, então se eu não fizer nada, ele ainda chamará rsync , mas não se eu modifiquei meu arquivo.

Atenciosamente

    
por BlackScorp 30.08.2013 / 09:30

3 respostas

8
  

crontab não seria bom, porque é executado a cada x segundos / minutos, então se eu não fizer nada, ele ainda vai chamar rsync mas não se eu modifiquei meu arquivo

rsync só sincronizará os arquivos que foram alterados. Se nada mudou, sairá. Isso é realmente uma sobrecarga mínima.

Se você não estiver satisfeito com isso, poderá usar inotifywait :

while inotifywait -r /directory/*; do
    rsync -avz /directory /target
done

Isso será mais instantâneo, mas fará as coisas a cada vez que você salvar.

    
por Oli 30.08.2013 / 10:01
1

Você pode usar o Lsyncd (Live Syncing Daemon) :

  

O Lsyncd assiste a uma interface do monitor de eventos de árvores do diretório local   (inotify ou eventos). Agrega e combina eventos para alguns   segundos e depois gera um (ou mais) processo (s) para sincronizar o   alterar. Por padrão, isso é rsync. O Lsyncd é, portanto, um live leve   solução de espelho que é comparativamente fácil de instalar e não requer   novos sistemas de arquivos ou dispositivos de bloco e não prejudica o sistema de arquivos local   desempenho.

Aqui está, por exemplo, um tutorial para o Ubuntu 16.04 .

    
por Arigion 04.09.2017 / 20:41
0

Você pode usar inotifywait e rsync . inotifywait com o evento modify,create,delete ativado. Desta forma, você irá sincronizar com o seu servidor apenas quando o arquivo for alterado, caso contrário, ele será sincronizado sempre que um arquivo for lido (os editores leram várias vezes seu arquivo para verificar se há alguma alteração). Assim disse:

while inotifywait -r -e modify,create,delete /directory; do
    rsync -avz /directory /target
done
    
por silgon 10.11.2016 / 11:23