
Estou prestes a executar um script python no Ubuntu no VPS. É um processo de treinamento de aprendizado de máquina, portanto, dedique muito tempo para treinar. Como posso fechar o putty sem interromper esse processo.
Responder1
Você tem duas opções principais:
Execute o comando com
nohup
. Isso irá desassociá-lo da sua sessão e deixá-lo continuar em execução após você desconectar:nohup pythonScript.py
Observe que o stdout do comando será anexado a um arquivo chamado,
nohup.out
a menos que você o redirecione (nohup pythonScript.py > outfile
).Use um multiplexador de tela como o
tmux
. Isso permitirá que você se desconecte da máquina remota, mas na próxima vez que você se conectar, se executartmux attach
novamente, você se encontrará exatamente na mesma sessão. O comando ainda estará em execução (continuará em execução quando você sair) e você poderá ver seu stdout e stderr como se nunca tivesse saído:tmux pythonScript.py
Depois de iniciar isso, basta fechar a janela do PuTTY. Em seguida, conecte-se novamente no dia seguinte, execute
tmux attach
novamente e você estará de volta ao ponto de partida.
Responder2
Oscreen
ferramenta, disponível para todas as distribuições Linux, suporta isso.
Para instalá-lo, execute apt-get install screen
para distros Linux baseadas em deb ou
dnf install -y screen
para yum install -y screen
distribuições baseadas em RPM.
Usar:
$ screen
Um novo shell é iniciado. Neste shell, você pode iniciar seu script Python. Então você pode pressionar Ctrl+ Shift+ Aentão D. Ele desconectará seu terminal do shell que está executando seu script. Além disso, o script ainda está em execução nele.
Para ver como seu script está sendo executado, você pode chamar screen -r
. Isso irá reconectar seu terminal ao shell com o script Python que você deixou em execução em segundo plano.
UPD: como Fox mencionou, a tela funciona mal com o systemd, mas podemos usar o systemd para iniciar o script, como dizem emexemplo oficial.
Por exemplo, se o seu script for iniciado por /usr/bin/myPythonScript
, você pode criar um arquivo de unidade Systemd, como este.
$ cat /etc/systemd/system/myPythonScript.service
[Unit]
Description=MyPythonScript
[Service]
ExecStart=/usr/bin/myPythonScript
[Install]
WantedBy=multi-user.target
Então, você pode iniciar este script
# systemctl daemon-reload
# systemctl start myPythonScript
Se você quiser que este script seja iniciado automaticamente na inicialização do sistema -
# systemctl enable myPythonScript
A qualquer momento você pode ver como seu script está sendo executado
# systemctl status myPythonScript
Anúncio, você pode revisar os registros do seu script
# journalctl -u myPythonScript -e
Responder3
A maioria dos processos pode ser enganada redirecionando seu stdout, stderr, stdin (nem todos os descritores são sempre necessários para redirecionar) e usando &
o operador de controle.
Veja que isso ping example.com 1>/dev/null &
faz o trabalho.
Claro que alguns programas são mais sofisticados e exigem soluções como as que o @terdon mencionou, mas é bom conhecer e usar o que melhor se adapta.
EDITAR: conforme escrito emesta respostamata systemd
processos no logout. Algumas versões de systemd
processos kill no logout por padrão, outras não. Este comportamento pode ser alterado modificando /etc/systemd/logind.conf definindo a seguinte opção. Conforme está escrito, também pode resolver alguns problemas que você possa ter com as soluções do @terdon.
de man logind.conf
:
KillUserProcesses=
Aceita um argumento booleano. Configura se os processos de um usuário devem ser eliminados quando o usuário efetua logout. Se for verdade, a unidade de escopo correspondente à sessão e todos os processos dentro desse escopo serão encerrados. Se for falso, o escopo será "abandonado", consulte systemd.scope(5) e os processos não serão eliminados. O padrão é "sim", mas veja as opções
KillOnlyUsers=
abaixoKillExcludeUsers=
.Além dos processos de sessão, o processo do usuário pode ser executado na unidade gerenciadora de usuários[e-mail protegido]. Dependendo das configurações de atraso, isso pode permitir que os usuários executem processos independentemente de suas sessões de login. Veja a descrição
enable-linger
emloginctl
(1).Observe que a configuração
KillUserProcesses=yes
interromperá ferramentas comoscreen
(1) etmux
(1), a menos que sejam movidas para fora do escopo da sessão. Veja o exemplo emsystemd-run
(1).
Leia a resposta vinculada para saber mais.