Ter um trabalho rsync concluído após o fechamento da conexão SSH

13

Estou transferindo uma grande quantidade de arquivos de um computador para outro usando rsync. Estou fazendo isso SSHing no computador de origem e executando um comando como este:

sudo rsync ssh --rsync-path="sudo rsync" source_dir [email protected]:dest_dir.

Mesmo se eu adicionar nohupantes desse comando, sempre que fechar a janela do terminal a partir da qual SSHed, a conexão será fechada.

Como posso tê-lo para que minha transferência de arquivos ainda continue quando fecho minha conexão SSH?

jaynp
fonte

Respostas:

16

A razão pela qual nohupnão está ajudando você é porque o programa funciona com arquivos IO padrão.

Aqui está um trecho da Página Wiki para nohup:

Nota - Nohupping jobs em segundo plano é normalmente usado para evitar finalizá-los ao fazer logoff de uma sessão SSH remota. Um problema diferente que geralmente surge nessa situação é que o ssh está se recusando a fazer logoff ("travar"), pois se recusa a perder dados de / para os trabalhos em segundo plano. Esse problema também pode ser superado redirecionando todos os três fluxos de E / S:

nohup ./myprogram > foo.out 2> foo.err < /dev/null &Observe também que uma sessão SSH de fechamento nem sempre envia um sinal HUP para os processos dependentes. Entre outros, isso depende se um pseudo-terminal foi alocado ou não.

Você pode usar screenpara isso.

Basta criar uma sessão de tela com: screen -S rsync então, você desanexa sua tela com CTRL+A d

E você pode se desconectar do SSH

bakytn
fonte
4
Quero acrescentar que, ao executar qualquer trabalho que será interrompido, por exemplo, por uma conexão perdida, seja problemático, execute-o em uma sessão de tela. A tela foi projetada para proteger contra perda acidental de conexão. Você pode efetuar login remotamente, iniciar a tela, iniciar seu trabalho e, se perder a conexão, poderá se reconectar a qualquer instância da tela em execução. A tela possui outra funcionalidade útil - capturar a sessão em um arquivo de log, ter várias "telas" em uma única sessão (economizando sobrecarga da rede) e vários visualizadores (estilo Classroom). Também vale mencionar que o tmux é uma alternativa de tela.
Johan
6

Esse comando de tela é bom, mas não funcionou exatamente para as minhas necessidades.

Isso funcionou muito melhor:

nohup rsync -va --delete ###.###.###.###:/var/www/sites/ /var/www/sites < /dev/null &
Ligemer
fonte
trabalhou para mim, assim como a resposta aceita, graças
Salaros