PC Actual Kiosko Online

Consejos

Consultas

SSH y nohup

25-03-2008 Sistemas operativos

Quiero lanzar un demonio en otra máquina vía ssh utilizando un script. Para ello, uso nohup, pero el cliente ssh no retorna y se queda colgado hasta que el programa que lanzo termina, por lo que no puedo apagar mi máquina sin abortar el programa en la máquina remota

No entiendo qué puedo hacer mal, porque si abro una sesión con ssh y lanzo desde el shell el demonio con nohup, sí que puede salir de la sesión. También me gustaría saber si existe alguna forma de aplicar nohup a un programa que ya está en ejecución.

 

PCA responde:

La diferencia estriba en que al iniciar una sesión con ssh se crea un ptty (un terminal virtual) para ejecutar el shell, mientras que al invocar un comando aislado por defecto no lo crea, simplemente se redirige la E/S al terminal del usuario vía el socket de la conexión ssh. Esta diferencia explica por qué en un caso funciona y en el otro no, porque nohup sólo redirige la salida estándar y de error a nohup.out y la entrada a /dev/null si la E/S estaba asociada a un terminal.

Nohup sólo redirige cuando hay un terminal, porque lo que busca prevenir es que al cerrar una shell y perderse el terminal virtual, el programa trate de escribir o leer del terminal. En cambio si la E/S ya estaba redirigida a ficheros o sockets asume que no hace falta redirigirla a ningún otro sitio porque supone que los ficheros siguen existiendo aunque se cierre la sesión. El problema es que como ssh redirige al socket de la conexión ssh, si se cierra la conexión, se pierde el socket, un caso no contemplado por nohup.

La solución, por lo tanto, reside en invocar con la opción -t para que se cree un tty virtual también en el caso de ejecutar un programa aislado, o bien manualmente redirigir la E/S estándar y de error a nohup.out o /dev/null. En lo que concierne a cómo lograr el mismo efecto que lanzar con nohup una vez que el programa ya está en ejecución, puedes usar el comando interno de la shell disown.

Compártelo!
Cerrar
  • Redes sociales
  • Correo electrónico
Enviar por correo