¿Cómo puedo iniciar un proceso en segundo plano de larga duración, a través de ssh, y desconectarme inmediatamente?

¿Cómo puedo iniciar un proceso en segundo plano de larga duración, a través de ssh, y desconectarme inmediatamente?

Quiero escribir un script bash que pueda conectarse mediante ssh a un servidor, iniciar un proceso continuo en segundo plano (script infinito de Python) y salir del servidor. Esto es lo que he probado:

ssh user@domain "python3 script.py &"

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

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

Ninguno de ellos está trabajando. El script se inicia correctamente pero no puedo salir del servidor y permanece conectado.

Respuesta1

El nohupcomando no hace lo que usted piensa: ignora una señal de colgar para que las conexiones (terminales) en STDIO se puedan desconectar sin que el controlador del terminal envíe SIGHUPa los procesos adjuntos, pero nohupno cierra sus propias conexiones STDIO, y en El efecto los pasa al proceso que inicia y, por lo tanto, sshdesperará hasta que el proceso finalice y esos descriptores se cierren como resultado.

Por lo tanto, debe asegurarse de que el proceso que inicia tampoco esté conectado a los descriptores STDOUT y STDERR que le proporcionó sshd(STDIN ya está abierto en /dev/null), y puede hacerlo redirigiéndolos (ya sea a un archivo o a /dev/null) . El nohupcomando no es estrictamente necesario ya que no se enviará nada SIGHUPcuando se interrumpa la conexión SSH.

Prueba esto:

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

Respuesta2

Pruebe un multiplexor de terminal, tmux es genial. Por lo general, no me gusta dar consejos sobre dónde es posible que tengas que instalar algo, pero tmux es una aplicación realmente útil para tener en tu cinturón de herramientas. (puede que ya esté instalado)

Puede iniciar su aplicación envuelta en tmux, desconectar, cerrar su computadora portátil, ir a otro lugar, volver a iniciar sesión y volver a conectarla a su sesión que aún se ejecuta en tmux. Si su sistema operativo es más antiguo, la pantalla es similar, pero prefiero tmux.

puedes iniciar una nueva aplicación desde la línea de comandos o una aplicación formateada como esta

tmux nueva sesión "comando1"

tmux new-session "ping 8.8.8.8"

Pero probablemente deberías nombrar tus sesiones. Ahora abreviamos una nueva sesión llamada muxping que comienza en segundo plano. El -d está separado.

tmux new -d -s muxping "ping 8.8.8.8"

ahora muéstralo en segundo plano

tmux ls

adjuntar a él

tmux a

Además puedes dividir la pantalla y hacer muchas cosas muy útiles en tmux. Hay muchos sitios con hojas de trucos de tmux que simplifican la página de manual grande. es bastante fácil empezar.

información relacionada