Uma transferência `scp` fecha quando eu fecho o shell?
29
Eu tenho scptransferência (de um servidor remoto para outro), isso é bastante grande.
Então, talvez eu queira fechar o computador do qual executei este comando, isso encerrará a transferência? Eu tenho sshacesso ao shell usando o programa Bitwise.
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 scptransferê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>
Oi Damien, obrigado pela ótima variedade de respostas e formatação. Mas eu queria ter alguma clareza sobre por que você especificou o -D -Rinício das bandeiras screen. Eu li a página man e não me ajudar a entender: -D -R Attach here and now. ...
hello_there_andy
@hello_there_andy O manual indica o que -DR faz claramente. Basicamente, se você já tiver uma sessão de tela em execução, ela será reconectada a ela em vez de criar uma nova sessão (mesmo se um usuário estiver conectado a ela via SSH - ela será expulsa, o que é útil se o usuário estiver travando devido para uma conexão de rede ruim.)
Damien Ó Ceallaigh
1
Observe que especificar um nome de sessão é opcional.
Damien Ó Ceallaigh
Ok, eu acho que entendo, mas acho que pensei (talvez de maneira errada) que foi isso que screen -r <session>fez ... então a -DRdiferença é -rque pode expulsá-los? Não basta reconectar e falhar se outro usuário estiver nele.
1513617
Eu fiz alguns testes para ter certeza. -D faz o que -d faz, exceto que também fecha a conexão SSH (desconecta o usuário), além de apenas desanexar as sessões de tela existentes. -r reconecta a sessão. -R reconecta uma sessão existente, mas criará uma nova sessão se não existir (-r falharia se não houver uma sessão para reconectar.) Portanto, fiquei um pouco impreciso na minha descrição anterior.
Damien Ó Ceallaigh
10
Você pode usar nohup(1), ou seja, fazer algo como:
Sim, será encerrado. A solução para manter a sessão do terminal ativa sem conectividade é o screenprograma:
SCREEN(1) SCREEN(1)
NAME
screen - screen manager with VT100/ANSI terminal emulation
SYNOPSIS
screen [ -options ] [ cmd [ args ] ]
screen -r [[pid.]tty[.host]]
screen -r sessionowner/[[pid.]tty[.host]]
DESCRIPTION
Screen is a full-screen window manager that multiplexes a physical ter‐
minal between several processes (typically interactive shells). Each
virtual terminal provides the functions of a DEC VT100 terminal and, in
addition, several control functions from the ISO 6429 (ECMA 48, ANSI
X3.64) and ISO 2022 standards (e.g. insert/delete line and support for
multiple character sets). There is a scrollback history buffer for
each virtual terminal and a copy-and-paste mechanism that allows moving
text regions between windows.
-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. ...
screen -r <session>
fez ... então a-DR
diferença é-r
que pode expulsá-los? Não basta reconectar e falhar se outro usuário estiver nele.Você pode usar
nohup(1)
, ou seja, fazer algo como:Isso criará uma saída de
nohup.out
. Então você pode sair com segurança.fonte
&
no final fez a diferença para mim! Obrigado!Sim, será encerrado. A solução para manter a sessão do terminal ativa sem conectividade é o
screen
programa:fonte
Como dito acima, você pode usar o comando screen, por exemplo:
user@server:~$ screen -S bigscptransfer
ser@server:~$ scp bigfile.dat server2:.
[detached from 5899.bigscptransfer]
user@server:~$ screen -r bigscptransfer
fonte
nohup scp shinto @ fonte: / home / data [email protected]: / var / tmp / file
pare temporariamente o comando com
colocar em segundo plano o comando, digite:
Você pode verificar o processo com:
fonte