¿Dejar el script bash ejecutándose en la terminal remota mientras no está conectado?

14

Tengo un script bash que tarda varias horas en ejecutarse. Mientras se está ejecutando, me gustaría hacer otras cosas, que pueden incluir cerrar sesión o desconectarse de Internet (mi script ejecuta pruebas de red en varias computadoras).

Entiendo que hay un comando que me permitiría ejecutar mis pruebas desde un terminal remoto y cerrar sesión mientras se ejecuta. ¿Alguien sabe qué es este comando?

Ritwik Bose
fuente

Respuestas:

17

El comando que estás buscando es nohup.

También existe screen, que es para cuando desea dejar algo en ejecución, pero vuelva y vuelva a conectarlo interactivamente más tarde.

nohupes más simple si un comando no espera ninguna entrada del usuario después del lanzamiento, y screenes mejor si desea poder ejecutar el programa de manera interactiva.

Justin Smith
fuente
Miré a nohup en este momento y aparentemente hay problemas con la entrada y la salida que pueden hacer que el script se cuelgue. También vi algo sobre la pantalla, que me parece lo que había leído antes. ¿Sabes cómo usar cualquiera de estos?
Ritwik Bose
1
nohup es para cuando un script no espera ninguna entrada del usuario: guarda toda la salida en un archivo. La pantalla es para cuando desea dejar algo en ejecución, pero vuelva y vuelva a conectarlo interactivamente más tarde. nohup es más simple si un comando no espera ninguna entrada del usuario después del inicio, y la pantalla es mejor si desea ejecutar el programa de manera interactiva.
Justin Smith
Ah lo encontré. Para la pantalla, es ctrl-A d para separar y -r + pid para volver a conectar.
Ritwik Bose
Buena respuesta. Debe agregar el comentario de la pantalla a su respuesta para que se destaque más.
DaveParillo
1

Yo uso nohuppara esto. En mi caso, tenía una secuencia de comandos de Python llamada action.py . Ejecuté la secuencia de comandos en un servidor remoto y nohup python action.py & luego cerré la terminal. Más tarde, cuando termine de ejecutarse, puede ver toda la salida del proceso en el nohup.outque se creará en el mismo directorio que action.py. Si el archivo ya existe, se le agregarán más resultados.

El único inconveniente es no saber cuándo el script ha seguido su curso, por lo que en mi caso tuve que enviarme un correo electrónico una vez completado. ¡Espero que esto haya ayudado a alguien!

Bryan J
fuente
0

¿Qué sucede si olvidó agregar el nohupcomando al comienzo de su comando?

Digamos que ha ejecutado el siguiente comando largo:

El comienzo de la salida de un comando largo

Esto se llama ya ls -Ral /que se supone que enumera todos los archivos y todas las carpetas, incluidas las ocultas, con un formato largo, comenzando recursivamente desde la carpeta raíz. Podría tomar un tiempo.

Solo presiona ctrl+ Z.

Deteniendo el comando largo

¿Cómo lo recuperas?

El comando para devolverlo al primer plano es fg.

Recuperando el comando


fuente