Como executar um script via SSH que não termina quando eu fecho a conexão?

18

Eu preciso executar o script, que leva muito tempo para executar, ou eu só quero que ele seja executado para sempre. Não posso apenas fazer o SSH na minha máquina, porque quando eu a desconecto, ela pára de funcionar.

Existe alguma maneira de executar um script que não depende do shell que o iniciou?

Estou usando o Ubuntu 9.04.

Jakub Arnold
fonte

Respostas:

24

Você pode executar o comando com o comando nohup antes dele. Você também pode executá-lo em 'tela', o que permitirá que você reconecte o terminal.

Por exemplo:

ssh mySever 'nohup bash myscript.sh'

Ou apenas faça o ssh e execute o comando nohup. Ele deve continuar funcionando mesmo quando você desconectar. Isso ocorre porque o nohup interceptará o sinal SIGHUP (hangup).

A tela é um pouco mais envolvida, mas, durante os 20 minutos que você leva para aprender o básico, é uma das ferramentas mais úteis disponíveis no mercado. Aqui está um tutorial .

Kyle Brandt
fonte
Sniped by Kyle ...> smile <
Evan Anderson
+1 para quem rouba Evan. Feliz 10K :) #
21410 squillman
11
o link para o tutorial está quebrado :(
Ido Ran
7

Eu sempre uso nohup. Se eu me preocupo com a saída, redireciono-a para um arquivo de log, caso contrário, a envio para / dev / null.

Exemplo:

nohup scp file.tar.gz root@someserver:/var/tmp > /dev/null 2>&1 &

Isso o coloca em segundo plano, com a saída indo para / dev / null, e é imune ao sinal HUP se você sair. Você também pode "repudiar" o trabalho com determinados shells (como o bash), para que ele não esteja conectado à sua sessão.

disown %1
m0j0
fonte
11
+1 para renegar - muito útil quando você se esqueça de executar usando nohup
Mark
5

Para instalar a tela: apt-get install screen

Em seguida, inicie usando simplesmente: screen

E man screenpara obter a ligação de chave.

Disco
fonte
+1! tela é uma coisa!
Javier
Eu costumava usar a tela, mas mudei para o tmux por várias razões. Google "tmux vs screen" e você encontrará alguns links como este: superuser.com/questions/236158/tmux-vs-screen
m0j0 20/17
2

Enquanto você estiver conectado a um servidor, poderá executar um script no modo desanexado pelo seguinte comando:

nohup script >script.out 2>script.err &

Mais tarde, quando você efetuar login novamente, poderá verificar script.out para qualquer saída e script.err para obter quaisquer mensagens de erro. Se você deseja mensagens de saída e erro no mesmo arquivo, faça:

nohup script >script.out 2>&1 &
Michael Dillon
fonte