Tengo un comando de larga ejecución que se está ejecutando sobre SSH. De vez en cuando, el comando parece colgar y dejar de obtener cualquier salida. El comando aún se está ejecutando en la otra máquina (de hecho, si presiona Ctrl + C fuera del comando SSH, aún se ejecuta, lo cual está bien), mi cliente simplemente se cuelga.
Mi comando está ejecutando un ant
objetivo, como este:
ssh -tt user@machine 'cd /thedir; export DISPLAY=:80; ant clean test'
los ant
El comando puede tardar hasta una hora.
Me imagino que esta es una mala estrategia, ya que pueden producirse errores en la red y estropear mi conexión. ¿Alguien puede sugerir un enfoque alternativo? Mi objetivo sería:
- Mi cliente espera a que termine el comando
- Todavía recibo salida del comando
- Si se producen fallos en la red, todavía puedo revisar y esperar a que finalice el comentario
Alguna ayuda o sugerencia será muy apreciada.
EDITAR: Estoy ejecutando un script bash completo ... No necesito una sola línea ni nada de eso.
fuente
screen
, y eso puede ser exactamente lo que estoy buscando. Voy a hacer algunas excavaciones.Respuestas:
Puede intentar ejecutar el comando en segundo plano (separado de su sesión de usuario) y enviarse el resultado por correo electrónico. Un poco así:
Aunque no he probado esto
fuente
Mi recomendación es usar una combinación de AutoSSH y la pantalla. autossh volverá a conectar automáticamente SSH si la sesión se desconecta, y la pantalla permite que su programa se ejecute independientemente de la sesión ssh para que pueda volver a conectarse a él en el proceso.
de esa manera, cuando su red tenga problemas, autossh se volverá a conectar y la pantalla volverá a unirse a su shell de scripts.
de esa manera, cuando ssh muera, autossh volverá a conectarse y se volverá a conectar automáticamente a la sesión de pantalla.
http://noone.org/blog/English/Computer/Shell/Perfect%20Team:%20autossh%20and%20GNU%20Screen.html
fuente