como você processa um processo ssh?

6

Eu sei que você pode suspender uma sessão ssh com ~ ^ z, mas existe também uma forma de contextualizar de forma que ela continue funcionando enquanto você faz outra coisa no shell local?

    
por dan 19.05.2012 / 00:17

2 respostas

10

Se você está tentando executar um processo remotamente, e não se importa em manter a sessão do ssh aberta, você pode querer usar screen . Ele permitirá que você execute seu processo no "segundo plano" e continuará funcionando após o seu logout.

Primeiro, ssh para a caixa remota e, a partir daí, use screen e inicie o processo, e você poderá fornecer seu nome de sessão screen , se desejar. Você realmente não notará nada diferente, mas inicie seu processo nessa sessão. Você pode sair da sessão screen usando o comando Ctrl-a d . Será algo parecido com isto:

user@remotebox:~$ screen -S foobarsession
user@remotebox:~$ startmyprocess
[detached from 4865.foobarsession]
user@remotebox:~$

Você pode sair da sessão ssh e o processo continuará sendo executado. Para reconectar-se à sessão screen mais tarde, volte para a caixa remota e use screen -r para reconectar. Você pode usar screen -ls para listar as sessões.

user@remotebox:~$ screen -ls
There is a screen on:
        4865.foobarsession     (10/05/2012 11:10:57 AM)     (Detached)
1 Socket in /var/run/screen/S-user
user@remotebox:~$ screen -r foobarsession
user@remotebox:~$ screen -ls
        4865.foobarsession     (10/05/2012 11:10:57 AM)     (Attached)
1 Socket in /var/run/screen/S-user
user@remotebox:~$

Ou, se screen não estiver instalado, você poderá usar o comando nohup na caixa remota. Wikipedia explica bem:

Nohupping backgrounded jobs is typically used to avoid terminating them when logging
off from a remote SSH session. A different issue that often arises in this situation
is that ssh is refusing to log off ("hangs"), since it refuses to lose any data
from/to the background job(s).  This problem can also be overcome by redirecting all
three I/O streams:

nohup ./myprogram > foo.out 2> foo.err < /dev/null &

Então você poderia fazer algo como:

ssh -n -f user@remotebox "sh -c 'cd /foo/bar; nohup ./myprogram > foo.out 2> foo.err < /dev/null &'"
    
por tpow 05.10.2012 / 18:16
8

Após ~ ^ z executar bg e o processo interrompido continuará sendo executado em segundo plano. Funciona com todos os processos, não apenas ssh.

P.S .: Com fg você coloca em primeiro plano o processo em segundo plano novamente. E apenas para o registro: O ~ só é necessário para distinguir se a suspensão deve estar na máquina local (com ~ - > o cliente ssh) ou no servidor (sem ~ - > qualquer que seja o processo atualmente em execução primeiro plano no servidor)

    
por yankee 19.05.2012 / 00:21