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 nohup
comando 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 SIGHUP
para processos anexados, mas nohup
não fecha suas próprias conexões STDIO, e em O efeito os transfere para o processo que inicia e, portanto, sshd
aguardará 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 nohup
comando não é estritamente necessário, pois nada será enviado SIGHUP
quando 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.