Qual é a melhor maneira de executar um comando ssh remoto em segundo plano, mas ainda exibindo?

14

Eu preciso executar comandos SSH remotamente com a saída sendo exibida localmente. Mas se a conexão quebrar eu quero que o comando ainda seja executado.

Não estou falando muito sobre o login e a execução, mas fazendo comandos ssh user @ remotehost '& & comando etc '

Como posso garantir que o comando seja executado mesmo se a conexão quebrar?

    
por vfclists 12.04.2012 / 23:30

5 respostas

26

A melhor maneira de fazer isso é usando a tela, que mantém a sessão aberta de forma persistente, mesmo se a conexão for interrompida (e se você quiser começar a usá-la novamente, pode fazer um screen -r e ela será aberta novamente).

Prefixo qualquer comando que você queira executar com screen (por exemplo, ssh -t user@host screen command ) deve fazer o trabalho.

Se você quiser que ele seja executado no plano de fundo do shell, você também pode anexar um & à coisa toda.

    
por 12.04.2012 / 23:38
11

Você quer ter uma sessão persistente que possa retomar ou apenas impedir que uma desconexão mate a exeção?

Para o primeiro, use screen , no segundo, nohup .

    
por 12.04.2012 / 23:34
7

Como mencionado anteriormente, screen pode fazer todo o truque. Mas não só o que você precisa. Eu uso a tela há anos e agora a uso toda vez que faço login nos sistemas. Tente instalar screen e crie ~/.screenrc com essa configuração:

sessionname     vcflists
startup_message off
deflogin        off
vbell           off
msgminwait      0
msgwait         10
log             off
backtick        1 0 0 hostname
caption splitonly "%?%F%{= yk}%:%{= Kk}%? %n %t%="
hardstatus alwayslastline "%{= rY}  %1'  %{= kg} %0c %{= bY}  %-w%{= Yk} %n %t %{-}%+w %=%{g}%l "

Em seguida, execute screen -Rd vcf . Essa é a invocação preferível da tela. Você se reconectará à sessão criada anteriormente com o nome vcf * (ou será avisado se for ambíguo) ou, se a sessão ainda não estiver aberta, será criada. CTRL + A é uma meta-chave que faz tudo. CTRL+A C ( CTRL + A , então C ) cria nova janela (tela) dentro da sessão. CTRL+A SPACE move o foco para a próxima janela em uma rodada. CTRL+A D desanexar a sessão atual mantendo todas as janelas funcionais entre as conexões. Se você tiver lançado alguma tarefa looooong, você pode se desconectar da tela e reconectá-la mais tarde para ver o que acontece. O mesmo acontece se a sua sessão ssh for perdida - a tela fica ativa com todas as janelas abertas e todas as tarefas iniciadas.

Se você quiser fechar alguma janela dentro da tela - apenas exit do shell nela. Se você deseja fechar todas as shells / tarefas em todas as janelas e sair da tela - apenas pressione CTRL+A CTRL+\ e pressione "Y" quando solicitado.

Para todo o resto, veja a tela do homem.

    
por 13.04.2012 / 00:26
2

Eu vi essa alternativa para uma conexão confiável "like" do ssh:

link

    
por 13.04.2012 / 19:20
1

Eu normalmente faço:

nohup mycommand &

tail -f nohup.out
    
por 13.04.2012 / 06:00