O que acontece com uma operação contínua se fizermos ssh e depois desconectarmos?


10

Estou movendo um diretório para outro usando o comando mv.

No entanto, fui forçado a desligar o computador, o que significa perder a conexão com o servidor.

O que acontece com o comando mv?

Nota: Após o logon, vi que todos os arquivos foram movidos corretamente, mesmo tendo certeza de que não foram movidos quando fechei a conexão. Parece que o mv continuou funcionando.

Este sou eu ssh para centosh machine no servidor de nuvem steadfast.net.


Eu acho, ele irá lançar um erro sobre a indisponibilidade de origem / destino #
SHW 10/13/13

1
mover um diretório para outro é "instantâneo" se eles estiverem na mesma partição. E mesmo se você mover arquivos por arquivo, pode ser rápido. Tem certeza de que continuou depois que você se desconectou (em vez de terminar enquanto os diferentes sinais SIGHUP são enviados para os processos filhos, o que pode levar algum tempo [na escala do computador]).
Olivier Dulac

como solução alternativa, use screenou faça o tmuxlogin para iniciar um terminal virtual que continuará operando quando você desconectar [ou seja, você poderá reconectá-lo posteriormente e ver o terminal no mesmo estado em que o deixou, além de atualizações em entre]
Olivier Dulac

Respostas:


19

Se mvfoi iniciado como:

ssh host mv x y

Em seguida mv, receberá um SIGPIPE (e morrer) se tentar gravar algo em stdout ou stderr (como uma mensagem de erro).

Se você iniciou uma sessão interativa como:

ssh host

E iniciado a mvpartir do shell interativo, quando o lado mestre do pseudo-terminal iniciado sshdserá fechado (ao sshfechar a conexão TCP na saída), o líder da sessão associado ao lado escravo do pseudo-terminal, que é o shell interativo remoto, receberá um sinal SIGHUP (desligue).

Ao receber esse sinal, os shells (a menos que você tenha emitido a trap '' HUP) normalmente encaminham esse sinal para todos os processos nos trabalhos que eles iniciaram, a menos que você tenha dito explicitamente para não fazer isso (como com disownou com &|alguns shells).

Outros processos (como mv) geralmente morrem ao receber esse sinal, a menos que tenham sido instruídos a ignorá-lo (usando nohupou se seus pais o ignoraram).

Se você emitiu um:

trap '' HUP

Todos os trabalhos iniciados depois dele o herdarão e ignorarão o SIGHUP.

O shell não morre do sinal SIGHUP enviado após a desconexão, mas sai no próximo prompt, pois seu stdin se foi. Na saída, algumas conchas enviam SIGHUP para seus trabalhos (não renegados). Aqueles que começaram depois que o trap '' HUPignoram, os outros vão morrer.

Em resumo, nesse caso, a menos que você tenha tomado precauções prévias para que isso não aconteça, você mvmorrerá.

Para evitá-lo da próxima vez, se estiver usando tcsh, zshou bash, antes de desligar a máquina, pressione Ctrl-Zpara suspender mv, entrar bgpara retomá-lo no fundo, e disownpara deserdá -lo.

Ou você pode usar screenou tmux. Em um SIGHUP, esses itens serão desconectados do terminal host agora desativado, mas os aplicativos executados no terminal que ele emula continuarão funcionando sem cabeça e você poderá reconectar a sessão a outro terminal posteriormente para ver como mvfoi.

Ou use-o nohup mvpara tornar-se mvimune ao SIGHUP e ter sua saída e erros em um nohup.outarquivo que você pode verificar mais tarde.

Agora, eu não sei sobre o seu provedor de hospedagem específico, mas com alguns, quando você sshentra na instância, não está iniciando sessões de shell por lá, mas sim anexado ao console, ou seja, a uma sessão que já foi iniciada e, quando você sai, não encerra a sessão, apenas desanexa-a. Portanto, o shell não mata, nem o mata mv. Se for esse o caso, você notará que a psexecução a partir daí daria o mesmo pidpara o seu shell em duas sshsessões separadas .


Então você está dizendo que o MV será encerrado. Bem, por favor, verifique a nota.
user4951

2
+1. resposta excelente (como vai bem nos detalhes para explicar o que acontece e quando).
Olivier Dulac

Compilei um artigo com base em suas respostas . Felizmente, alguém achará útil.
X-yuri
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.