
Estoy a punto de ejecutar un script de Python en Ubuntu en VPS. Es un proceso de capacitación en aprendizaje automático, por lo que tómate mucho tiempo para capacitarte. ¿Cómo puedo cerrar PuTTY sin detener ese proceso?
Respuesta1
Tienes dos opciones principales:
Ejecute el comando con
nohup
. Esto lo desasociará de su sesión y permitirá que continúe ejecutándose después de que se desconecte:nohup pythonScript.py
Tenga en cuenta que la salida estándar del comando se agregará a un archivo llamado
nohup.out
a menos que lo redirija (nohup pythonScript.py > outfile
).Utilice un multiplexor de pantalla como
tmux
. Esto le permitirá desconectarse de la máquina remota pero, la próxima vez que se conecte, si ejecutatmux attach
nuevamente, se encontrará exactamente en la misma sesión. El comando seguirá ejecutándose (continuará ejecutándose cuando cierre la sesión) y podrá ver su salida estándar y su stderr como si nunca hubiera cerrado la sesión:tmux pythonScript.py
Una vez que lo hayas iniciado, simplemente cierra la ventana de PuTTY. Luego, conéctate nuevamente al día siguiente,
tmux attach
vuelve a ejecutar y estarás de nuevo donde empezaste.
Respuesta2
Elscreen
La herramienta, disponible para todas las distribuciones de Linux, lo admite.
Para instalarlo, ejecútelo apt-get install screen
para distribuciones de Linux basadas en Deb o
dnf install -y screen
para yum install -y screen
distribuciones basadas en RPM.
Usar:
$ screen
Se inicia un nuevo caparazón. En este shell, puede iniciar su script Python. Luego puedes presionar Ctrl+ Shift+ Ay luego D. Separará su terminal del shell que ejecuta su script. Además, el script todavía se está ejecutando.
Para ver cómo se está ejecutando su script, puede llamar screen -r
. Esto volverá a conectar su terminal al shell con el script de Python que dejó ejecutándose en segundo plano.
UPD: como mencionó Fox, la pantalla funciona mal con systemd, pero podemos usar systemd para iniciar el script, como dicen enejemplo oficial.
Por ejemplo, si su secuencia de comandos se inicia con /usr/bin/myPythonScript
, puede crear un archivo de unidad Systemd, como este.
$ cat /etc/systemd/system/myPythonScript.service
[Unit]
Description=MyPythonScript
[Service]
ExecStart=/usr/bin/myPythonScript
[Install]
WantedBy=multi-user.target
Luego, puedes iniciar este script.
# systemctl daemon-reload
# systemctl start myPythonScript
Si desea que este script se inicie automáticamente al iniciar el sistema,
# systemctl enable myPythonScript
En cualquier momento podrás ver cómo se está ejecutando tu script.
# systemctl status myPythonScript
Anuncio puedes revisar los registros de tu script.
# journalctl -u myPythonScript -e
Respuesta3
La mayoría de los procesos pueden engañarse redirigiendo su salida estándar, stderr, stdin (no siempre es necesario redirigir todos los descriptores) y utilizando &
el operador de control.
Mira, eso ping example.com 1>/dev/null &
hace el trabajo.
Por supuesto, algunos programas son más sofisticados y requieren soluciones como las que mencionó @terdon, pero es bueno saber y utilizar cuál se adapta mejor.
EDITAR: como está escrito enesta respuestamata systemd
los procesos al cerrar sesión. Algunas versiones de systemd
procesos de eliminación al cerrar sesión de forma predeterminada, otras no. Este comportamiento se puede cambiar modificando /etc/systemd/logind.conf configurando la siguiente opción. Tal como está escrito, también puede resolver algunos problemas que pueda tener con las soluciones de @terdon.
de man logind.conf
:
KillUserProcesses=
Toma un argumento booleano. Configura si los procesos de un usuario deben finalizar cuando el usuario cierra la sesión. Si es verdadero, se terminará la unidad de alcance correspondiente a la sesión y todos los procesos dentro de ese alcance. Si es falso, el alcance se "abandona", consulte systemd.scope(5), y los procesos no se eliminan. El valor predeterminado es "sí", pero consulte las opciones
KillOnlyUsers=
aKillExcludeUsers=
continuación.Además de los procesos de sesión, el proceso de usuario puede ejecutarse en la unidad de administrador de usuarios.[correo electrónico protegido]. Dependiendo de la configuración de permanencia, esto puede permitir a los usuarios ejecutar procesos independientemente de sus sesiones de inicio de sesión. Ver la descripción de
enable-linger
enloginctl
(1).Tenga en cuenta que la configuración
KillUserProcesses=yes
interrumpirá herramientas comoscreen
(1) ytmux
(1), a menos que se saquen del alcance de la sesión. Ver ejemplo ensystemd-run
(1).
Lea la respuesta vinculada para obtener más información.