exclusão rsync e sincronização de várias máquinas

0

Tenho a seguinte situação: Tenho várias máquinas clientes (ou seja, cliente1, cliente2, cliente3) e gostaria de manter uma determinada pasta ("/ código") sincronizada em todas as máquinas. Atualmente, tenho um script rsync configurado em um servidor separado para manter os arquivos sincronizados. Ou seja, no servidor, faço algo como o seguinte:

# Step 1: update/copy all files from each client to the server
rsync -vrtu client1:/code/ /code
rsync -vrtu client2:/code/ /code
rsync -vrtu client3:/code/ /code

# Step 2: synchronize each client with the server
rsync -vrtu /code/ client1:/code
rsync -vrtu /code/ client2:/code
rsync -vrtu /code/ client3:/code

Eu corro isso usando o cron e propaga qualquer atualização de arquivo em uma máquina para todas as máquinas. O problema é que as exclusões não são propagadas. Além disso, se eu entender a opção rsync --delete corretamente, parece que o uso de --delete impediria que novos arquivos de meus clientes fossem adicionados ao servidor. Isso está correto? Gostaria apenas de manter os arquivos dos três clientes completamente sincronizados (adições, exclusões e modificações). Existe uma maneira simples de fazer o que eu quero usando o rsync?

Melchimm
fonte

Respostas:

1

adicionando --delete ao rsync, excluirá os arquivos que estão no lado de recebimento. Portanto, não haverá nada para sincronizar na etapa 2. Todos os novos arquivos nos clientes já terão desaparecido. Rsync --delete direcionará apenas o diretório que está sendo sincronizado.

Você pode usar vários diretórios. Ou seja, use um diretório dedicado para novos arquivos nos clientes.

Você também deve considerar um sistema de controle de versão como o git, para esse tipo de sincronização de código. Dessa forma, você obtém mesclagens mais limpas se um arquivo no cliente for alterado. Você pode reverter, usar vários ramos diferentes, ver quem mudou o que e muito mais.

No git, você usa um gancho pós-recebimento para isso e faz check-out da ramificação atual no seu diretório de trabalho.

MarkusDBX
fonte