Existem várias soluções.
Antecedentes e renegar o processo
- Abra o terminal ssh no servidor remoto.
- Comece a
scp
transferência como de costume.
- Em segundo plano o processo scp ( Ctrl+ Z, depois o comando
bg
.)
- Rejeite o processo em segundo plano (
disown
).
- Encerre a sessão (
exit
) e o processo continuará sendo executado na máquina remota.
Uma desvantagem dessa abordagem é que os descritores de arquivo para stdout e stderr ainda conterão referências ao tty da sua sessão ssh. O terminal pode travar quando você tenta sair por causa disso. Você pode contornar isso digitando ~.
para forçar o fechamento do seu cliente ssh (essa sequência de escape deve seguir uma nova linha ... veja também ~?
). Se o processo que você está abandonando grava no stdout ou stderr, o processo pode sair prematuramente se o buffer tty sobrecarregar.
Criar uma sessão de tela e desanexá-la
O GNU Screen pode ser usado para criar uma sessão de terminal remoto, que pode ser desanexada e continuar em execução no servidor após o logoff da sessão. Você pode fazer login novamente no servidor posteriormente e reconectar à sessão.
- Efetue login no servidor remoto por ssh.
- Inicie uma sessão na tela
screen -D -R <session_name>
.
- Comece a
scp
transferência como de costume.
- Desanexe a sessão da tela com Ctrl+ Aentão d.
- Encerre a sessão ssh (
exit
)
Para reconectar à sessão:
- Efetue login no servidor remoto por ssh.
- Reconecte à sessão da tela,
screen -D -R <session_name>
Execute o comando sem hangups
Veja a resposta usando nohup
.
Use um agendador de tarefas
Essa é a melhor solução se esse for um tipo de tarefa periódica que você deseja automatizar.
Use crontab
, at
ou batch
para agendar a transferência.
-D -R
início das bandeirasscreen
. Eu li a página man e não me ajudar a entender:-D -R Attach here and now. ...