como manter um script python em execução quando fecho o putty

como manter um script python em execução quando fecho o putty

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:

  1. 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.outa menos que você o redirecione ( nohup pythonScript.py > outfile).

  2. 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 executar tmux attachnovamente, 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 attachnovamente e você estará de volta ao ponto de partida.

Responder2

Oscreenferramenta, disponível para todas as distribuições Linux, suporta isso.

Para instalá-lo, execute apt-get install screenpara distros Linux baseadas em deb ou dnf install -y screenpara yum install -y screendistribuiçõ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 systemdprocessos no logout. Algumas versões de systemdprocessos 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=abaixo KillExcludeUsers=.

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-lingerem loginctl(1).

Observe que a configuração KillUserProcesses=yesinterromperá ferramentas como screen(1) e tmux(1), a menos que sejam movidas para fora do escopo da sessão. Veja o exemplo em systemd-run(1).

Leia a resposta vinculada para saber mais.

informação relacionada