Como desanexar a sessão ssh sem matar um processo em execução?

2

Eu iniciei um redimensionamento do sistema de arquivos de teste em um servidor por meio do ssh, mas esqueci completamente de fazer isso em uma sessão screen . Agora ele está funcionando e meu laptop tem internet muito lenta. Existe alguma maneira que eu possa mantê-lo em execução se eu perder a conexão ssh?

Também produz progresso, mas eu não preciso me preocupar com isso.

SO: equivalente a RHEL7.2 (SL7).

Provavelmente, é melhor vincular isso como a solução: link

não sei como vincular isso ao invés do sugerido, então sinta-se à vontade para adicionar isso e marcar como duplicado

    
por xcorat 09.02.2018 / 00:16

3 respostas

4

Este é exatamente o caso man 1 reptyr menciona explicitamente:

reptyr is a utility for taking an existing running program and attaching it to a new terminal. Started a long-running process over ssh, but have to leave and don't want to interrupt it? Just start a screen, use reptyr to grab it, and then kill the ssh session and head on home.

Não perca esta nota:

reptyr depends on the ptrace(2) system call to attach to the remote program. On Ubuntu Maverick and higher, this ability is disabled by default for security reasons. You can enable it temporarily by doing

echo 0 > /proc/sys/kernel/yama/ptrace_scope

as root, or permanently by editing the file /etc/sysctl.d/10-ptrace.conf, which also contains more information about this setting.

Observe também que reptyr apenas anexa um processo a outro terminal. Isso não significa que o processo se torne um filho do novo shell.

O uso básico é simples:

reptyr PID

onde PID é o PID do processo que você deseja anexar a um novo terminal.

    
por 09.02.2018 / 00:24
3

Use

Ctrl-Z

para pausar o aplicativo e retornar à linha de comando. Então use

bg

para permitir que o processo continue em segundo plano. Finalmente use

disown

Para que o processo não seja fechado quando você desconectar sua sessão e fechar seu terminal.

O processo continuará a ser executado, mas não há como "reconectar-se" ao terminal para visualizar a saída da qual estou ciente se você se reconectar a uma nova sessão.

    
por 09.02.2018 / 04:06
2

Você pode desassociar totalmente um comando (em bash ou zsh , possivelmente outros shells) com o comando disown . No entanto, o comando pode não ficar feliz com isso se precisar de um tty; nesse caso, consulte a reptyr answer.

$ ssh somecentos7system
-bash-4.2$ sleep 252727
^Z
[1]+  Stopped                 sleep 252727
-bash-4.2$ bg
[1]+ sleep 252727 &
-bash-4.2$ disown
-bash-4.2$ logout
Connection to somecentos7system closed.
$ ssh somecentos7system
-bash-4.2$ pgrep -lf 252727
20089 sleep
-bash-4.2$ 

Outra opção é ter uma sessão de tela (ou tmux) iniciada automaticamente, então você não pode esquecer de iniciar uma, porque uma delas já foi iniciada porque você configurou as coisas dessa maneira. Há outras postagens em outros lugares sobre como fazer isso.

    
por 09.02.2018 / 00:47