O melhor método é iniciar o processo em um multiplexador de terminal. Como alternativa, você pode fazer com que o processo não receba o sinal HUP.
Um multiplexador de terminal fornece terminais "virtuais" que funcionam independentemente do terminal "real" (na verdade, todos os terminais hoje são "virtuais", mas esse é outro tópico para outro dia). O terminal virtual continuará funcionando, mesmo que seu terminal real esteja fechado com sua sessão ssh.
Todos os processos iniciados no terminal virtual continuarão em execução com esse terminal virtual. Quando você se reconecta ao servidor, pode se reconectar ao terminal virtual e tudo será como se nada tivesse acontecido, exceto o tempo que passou.
Dois populares multiplexadores de terminal são screen e tmux .
A tela possui uma curva de aprendizado acentuada. Aqui está um bom tutorial com diagramas explicando o conceito: http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
O sinal HUP (ou SIGHUP) é enviado pelo terminal para todos os seus processos filhos quando o terminal é fechado. A ação comum ao receber o SIGHUP é terminar. Assim, quando sua sessão ssh for desconectada, todos os seus processos serão encerrados. Para evitar isso, você pode fazer com que seus processos não recebam SIGHUP.
Dois métodos fáceis de fazer isso são nohup
e disown
.
Para obter mais informações sobre como nohup
e disown
funciona, leia esta pergunta e resposta: https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and
Nota: embora os processos continuem em execução, você não pode mais interagir com eles porque eles não estão mais conectados a nenhum terminal. Esse método é útil principalmente para processos em lote de execução longa que, uma vez iniciados, não precisam mais de nenhuma entrada do usuário.
screen
oferece muito mais opções, mas se você estiver usandoauthorized_keys
para permitir que as pessoas executem um script remotamentessh
, anohup
opção é uma maneira simples e agradável de o script iniciar processos que duram mais do que assh
sessão usada para iniciá-los .