O Rsync exclui arquivos no diretório antigo?

1

Estou realmente preso a um problema de rsync e não consegui decifrá-lo lendo a documentação. Eu quero fazer 7 diretórios, um para cada dia da semana, para back-ups de algumas pastas e arquivos do meu servidor. O problema que estou tendo é rsync parece estar excluindo os diretórios que backup no dia anterior.

Por exemplo ...

/ backup / Monday conterá os arquivos que eu movi, mas não os diretórios / backup / Tuesday / irá conter os arquivos e diretórios

Gostaria que o diretório Monday contivesse todos os arquivos que existiam na segunda-feira e que o diretório Tuesday contivesse todos os arquivos que existiam na terça-feira.

Aqui está o meu script:

ssh [email protected] 'find /backup/staging/ -mtime +7 -exec rm -rf {} \;'
crontab -l > $(date +%Y%m%d).crontab
mysqldump -password cherry --all-databases> $(date +%Y%m%d)_cherrydb.sql
rsync -a --log-file=$(date +%Y%m%d).log /var/www/admin /var/www/customers /var/www/UploadedFiles /etc/apache2/certs /etc/apache2/sites-enabled $(date +%Y%m%d).crontab $(date +%Y%m%d)_cherrydb.sql [email protected]:/backup/staging/$(date +%A)/
rsync -a $(date +%Y%m%d).log [email protected]:/backup/staging/$(date +%A)/
rm $(date +%Y%m%d).log
rm $(date +%Y%m%d).crontab
rm $(date +%Y%m%d)_cherrydb.sql
    
por Kenny 22.12.2015 / 18:42

2 respostas

1

Não sei ao certo, mas acredito que o problema esteja na primeira linha do seu script. Eu acho que sua intenção é apagar o backup da semana anterior, mas essa é uma maneira perigosa de fazer isso. Duas opções alternativas seriam substituir a primeira linha por

ssh [email protected] 'rm -rf /backup/staging/$(date +%A)/*'

ou para remover a primeira linha do script e usar o sinal --delete no primeiro rsync para remover qualquer arquivo no destino que não faça parte do conjunto de backup.

    
por 22.12.2015 / 18:50
0

O problema é com a combinação da primeira linha do script e o comando rsync . Vamos dar uma olhada ...

O comando find /backup/staging/ -mtime +7 -exec rm -rf {} \; remove todos os arquivos e árvores inteiras de diretório onde o arquivo ou raiz da árvore de diretórios não foi modificado por pelo menos sete dias.

Você também está usando rsync -a ... , que copia os tempos de modificação de arquivos e diretórios.

O resultado líquido é que seu find corresponderá e removerá arquivos e árvores de diretórios que foram criados há pelo menos sete dias. Normalmente, isso incluirá arquivos do sistema, como /bin/ls e quase com certeza / . Você pode verificar com ls -ld / e confirmar que a data de modificação exibida é há mais de uma semana.

Uma solução seria usar rsnapshot , que gerencia backups cronometrados e datados extremamente bem. Outro pode ser usar rsync -a ... --delete , mas no geral eu recomendo rsnapshot .

Se você realmente quiser rolar sua própria solução, considere algo parecido com este par de comandos:

find /backup/staging -mtime +7 \! -type d -delete
find /backup/staging -depth -type d -exec rmdir {} + 2>/dev/null

Isso removerá todos os não diretórios (ou seja, arquivos, nós de dispositivos, etc.) com mais de sete dias e, em seguida, removerá todos os diretórios vazios.

    
por 22.12.2015 / 18:59