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 nohup
comando 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 SIGHUP
a los procesos adjuntos, pero nohup
no cierra sus propias conexiones STDIO, y en El efecto los pasa al proceso que inicia y, por lo tanto, sshd
esperará 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 nohup
comando no es estrictamente necesario ya que no se enviará nada SIGHUP
cuando 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.