Como posso usar o nohup se o script de shell levar mais tempo para ser executado?

2

Meus scripts demoram muito tempo para serem executados, em torno de 30 minutos, mas se eu sair e sair para almoçar duvido que:

1: a sessão de putty será fechada se o script estiver sendo executado?

2: se a putty session fechar, o script sairá.

Se eu usar nohup scriptname , tudo bem?

    
por munish 12.04.2013 / 15:54

1 resposta

2

PuTTY (ou qualquer outro cliente SSH) não se importa se você está olhando para a tela ou para fora para almoçar. Não fechará uma sessão por conta própria.

Uma sessão será encerrada apenas se:

  1. Você fechá-lo manualmente (por exemplo, digite logout , Ctrl + D , exit , etc etc)
  2. Há um gatilho de logout automático ou inativo definido no seu shell.
  3. A conexão de rede é interrompida.
O último não deve acontecer de forma aleatória, embora equipamentos ruins possam 'ajudar' fechar conexões quando eles acham que estão ociosos. Isso geralmente acontece com equipamentos SOHO que vêm com pouca memória e conexão agressivamente próxima quando eles acham que não são mais usados.

Até agora, para puTTY e sessões. Quanto a nohup , vamos nos aprofundar um pouco mais.

Nos primeiros dias, as pessoas usavam linhas telefônicas e modems para discar. Às vezes, essa conexão morria. Nesse caso, o shell recebe um sinal de que a linha detectou um desligamento. (sinal 1, HUP).

Quando isso acontece, o shell sinaliza os programas em execução com SIGHUP, o que basicamente significa que a linha telefônica caiu. Por favor desligue nitidamente. (feche arquivos, salve se necessário etc etc).

Quando você sai ou quando puTTY (ssh) morre, o mesmo acontece.

Se você executar um programa com nohup , duas coisas acontecerão:

  1. O SIGHUP é ignorado. Então o programa não desliga.
  2. A saída padrão é gravada em um arquivo (padrão: nohup.out ) em vez de no TTY.

If I use nohup scriptname will it be fine?

Se você usar nohup scriptname e o script não precisar de nenhuma entrada, então sim, tudo ficará bem. Se você quiser ver a saída do script enquanto ele está rodando, você pode seguir o arquivo de log.

nohup scriptname & e tail -f nohup.out

Além de nohup , há pelo menos duas outras opções interessantes:

Ambos permitem não apenas sobreviver a uma linha desconectada, mas também reconectar um terminal posteriormente.

Exemplo:

Sentado atrás de um computador 1, conectado ao servidor 1

screen                         Starts screen
make bzimage                   Whatever task/script you want
Ctrl+A, Ctrl+D             Detach; screen seems to have ended
logout                         Logout

Neste ponto, screen ainda está em execução e fornecendo um shell para seu script.

Digamos que você vá para casa, sente-se atrás de sua própria área de trabalho e ssh para o servidor-1,

ssh server-1.work.tld
  username
  password
screen -r                      (Continue a previously added screen)
   ︙                           Continue where you left off at work.

    
por 12.04.2013 / 16:11

Tags