Como posso iniciar um processo em segundo plano de longa duração, via ssh, e desconectar imediatamente?

Como posso iniciar um processo em segundo plano de longa duração, via ssh, e desconectar imediatamente?

Quero escrever um script bash que possa fazer ssh em um servidor, iniciar um processo contínuo em segundo plano (script python infinito) e sair do servidor. Aqui está o que eu tentei:

ssh user@domain "python3 script.py &"

ssh user@domain "python3 script.py & exit"

ssh user@domain "nohup python3 script.py & exit"

Nenhum deles está funcionando. O script é iniciado com êxito, mas não consigo sair do servidor e ele permanece conectado.

Responder1

O nohupcomando não está fazendo o que você pensa - ele ignora um sinal de desligamento para que as conexões (terminais) no STDIO possam ser descartadas sem que o driver do terminal seja enviado SIGHUPpara processos anexados, mas nohupnão fecha suas próprias conexões STDIO, e em O efeito os transfere para o processo que inicia e, portanto, sshdaguardará até que o processo termine e esses descritores sejam fechados como resultado.

Portanto, você precisa ter certeza de que o processo iniciado também não está conectado aos descritores STDOUT e STDERR fornecidos por sshd(STDIN já está aberto em /dev/null) e você pode fazer isso redirecionando-os (para um arquivo ou para /dev/null) . O nohupcomando não é estritamente necessário, pois nada será enviado SIGHUPquando a conexão SSH cair.

Experimente isto:

ssh user@domain "python3 script >/dev/null 2>&1 &"

Responder2

Experimente um multiplexador de terminal, o tmux é ótimo. Normalmente não gosto de dar conselhos sobre onde você precisa instalar algo, mas tmux é um aplicativo muito útil para ter em seu cinto de ferramentas. (já pode estar instalado)

Você pode disparar seu aplicativo embrulhado em tmux detach, fechar seu laptop, ir para outro lugar, fazer login novamente e reconectar-se à sua sessão que ainda está em execução no tmux. Se o seu sistema operacional for mais antigo, a tela é semelhante, mas eu prefiro o tmux.

você pode iniciar um novo aplicativo a partir da linha de comando ou aplicativo formatado como este

tmux nova sessão “command1”

tmux new-session "ping 8.8.8.8"

Mas você provavelmente deveria nomear suas sessões. Agora abrevie a nova sessão chamada muxping que começa em segundo plano. O -d está desanexado.

tmux new -d -s muxping "ping 8.8.8.8"

agora mostre em segundo plano

tmux ls

anexar a ele

tmux a

Além disso, você pode dividir a tela e fazer muitas coisas úteis no tmux. Existem muitos sites com folhas de dicas do tmux que simplificam a grande página de manual. é muito fácil começar.

informação relacionada