impeça o rsync de remover arquivos de origem inacabados

169

Eu tenho duas máquinas, velocidade e massa. O speed possui uma conexão rápida à Internet e está executando um rastreador que baixa muitos arquivos no disco. massa tem muito espaço em disco. Quero mover os arquivos da velocidade para a massa após o download. Idealmente, eu apenas corria:

$ rsync --remove-source-files speed:/var/crawldir .

mas receio que o rsync desvincule um arquivo de origem que ainda não terminou o download. (Examinei o código-fonte e não vi nada protegendo contra isso.) Alguma sugestão?

aaronsw
fonte

Respostas:

10

Parece-me que o problema está transferindo um arquivo antes que ele seja concluído, não que você esteja excluindo-o.

Se for o Linux, é possível que um arquivo seja aberto pelo processo A e o processo B pode desvincular o arquivo. Não há erro, mas é claro que A está perdendo tempo. Portanto, o fato de o rsync excluir o arquivo de origem não é um problema.

O problema é que o rsync exclui o arquivo de origem somente após a cópia e, se ainda estiver sendo gravado no disco, você terá um arquivo parcial.

Que tal isso: Montar masscomo um sistema de arquivos remoto (o NFS funcionaria) no speed. Em seguida, basta rastrear os arquivos diretamente na web.

Jason Cohen
fonte
9

Quanto controle você tem sobre o processo de download? Se você criar o seu próprio, poderá fazer com que o arquivo que está sendo baixado vá para um diretório temporário ou tenha um nome temporário até o término do download e, em seguida, mova-o para o nome correto quando terminar. Se você estiver usando software de terceiros, não terá tanto controle, mas ainda poderá executar o diretório temporário.

Paul Tomblin
fonte
3

O Rsync pode excluir arquivos correspondentes a determinados padrões. Mesmo que você não possa modificá-lo para fazer o download de arquivos em um diretório temporário, talvez tenha a convenção de nomear os arquivos de maneira diferente durante o download (por exemplo: foo.downloadingdurante o download de um arquivo chamado foo) e você pode usar essa propriedade para excluir arquivos que ainda estão sendo baixados e copiados.

Pantera Cinza
fonte
3

Se você tem controle sobre o processo de rastreamento ou possui saída previsível, as soluções acima (armazenando em um arquivo temporário até a conclusão, movendo-o para o local dos downloads concluídos ou ignorando os arquivos com o nome '.downloading') pode funcionar. Se tudo isso estiver fora do seu controle, você pode garantir que o arquivo não seja aberto por nenhum processo executando 'lsof $ filename' e verificando se há um resultado. Claramente, se ninguém tiver o arquivo aberto, é seguro movê-lo.

pjz
fonte