O problema foi devido à criação de arquivos temporários, como sugerido em outras respostas. Ele foi resolvido quando adicionei - temp-dir = / tmp como uma opção de rsync.
Existem dois servidores Linux do RHEL 7.2 localizados em locais diferentes. Ambos têm a mesma estrutura de diretórios. O requisito é manter certos diretórios dos dois servidores em sincronia, ou seja, qualquer modificação no servidor1 deve ser refletida no servidor2 e vice-versa, mas se algum arquivo for excluído localmente, não deverá ser excluído do servidor remoto também. Se alguns arquivos forem modificados enquanto o link entre esses dois servidores estiver inativo, ele deverá ser copiado assim que o link for estabelecido. Para implementar, é feito o seguinte script:
#!/bin/bash
EVENTS="CREATE,MOVED_TO,MODIFY"
inotifywait -e "$EVENTS" -m -r --format '%w%f' --fromfile list.txt|
while read FILE; do
echo $FILE
returnvalue=1
while [[ $returnvalue -ne 0 ]]
do
rsync -azr $FILE backupserver:/$FILE
returnvalue=$?
echo $returnvalue
if [[ $returnvalue -ne 0 ]]
then
sleep 60
fi
done
done
list.txt contém todos os diretórios a serem monitorados. Este script está sendo executado nos dois servidores.
Problema: sempre que alguma modificação é feita no servidor1, ele a detecta e copia para o servidor2 com código de retorno 0 . Mas isso é detectado no server2 como nova modificação e ele tenta copiar de volta para server1, já que esse arquivo está presente no server1 rsync retorna um código de erro 23 , então os programas ficam presos.
Qual é a melhor solução para esse problema?
Observação: Não podemos usar a opção --ignore-existing já que o mesmo arquivo existe em ambos os lugares e precisa ser atualizado se o conteúdo for alterado.
** primeiro pensei que isso poderia ser um problema de opção de rsync ** Eu acho diferente agora!
Resposta: use um bloqueio local para reivindicar o direito de fazer uma cópia
Eu sugeriria um teste simples, se você não tem um, de um diretório - e primeiro - apenas use os padrões e veja onde isso não funciona como desejado.
** coisas rsync deletadas **
OK - faça o backup de 4 etapas e observe novamente.
Talvez o problema seja a lógica do loop:
Eu suspeito que esse "imediatismo" esteja na raiz do problema.
Minha sugestão é adicionar um arquivo "LOCK" de algum tipo:
Você pode substituir a espera em MODIFY
events esperando em close_write
(arquivo fechado após ser aberto gravável), o que garantirá que você não tente rsync arquivos que ainda estão mudando.
Tags rsync inotify shell-script rhel