Ejecute el script Bash en segundo plano y salga de la terminal


Respuestas:


45

Para evitar que las señales de salida se propaguen a los procesos secundarios del terminal y el shell, ejecute el comando con nohup, es decir:

nohup cmd &

1
Esta es la respuesta correcta. Sin nohup, el proceso iniciado aún se considera un "hijo" del proceso terminal y, por lo tanto, finaliza si el terminal está cerrado.
— Izzy

3
cmd & disowntambién funciona, ya que &se trata como un ;separador de comandos. El comando disown elimina la conexión entre la sesión de shell bash y el comando de fondo.
— lornix

2
zsh tiene una taquigrafía para esto: cmd &|.
— Thor

Para que esto funcione, tuve que cambiar una preferencia en Terminal.app. En Perfiles, seleccione su perfil activo, luego Shell> Cuando sale el shell> Cerrar si el shell salió limpiamente
— antoine

6

Utilizando screen:

screen -S <session name> -d -m <your command>

después de eso, puede salir de la terminal, también puede volver a conectarla:

screen -r <session name>

Más información: referencia


4

Si desea ejecutar un comando o archivo específico cada segundo más o menos en segundo plano después de salir del terminal, puede probar esta pequeña cosa fácil;

nohup watch -n5 'bash script.sh' &

Eso correría scipt.sh cada 5 segundos.


1
"nohup" ya está cubierto por la respuesta aceptada. Y estoy bastante seguro de que el autor de la pregunta mencionó cron porque lo estaban usando para decir "Ejecute este comando unos segundos en el futuro", no para ejecutarlo periódicamente.
— David Richerby

1
Mi respuesta no empeora las cosas. Ver el punto de voto negativo. Neural sería suficiente.
— jamietelin

3

Ponga un carácter "&" después de su comando.

p.ej:

/home/your/script.sh &

77
en este caso, cuando el terminal está cerrado, también comienza el proceso /home/your/script.sh, ya que no se desconectó de su "padre", sino que simplemente "quedó en segundo plano". Úselo nohuppara separarlo de verdad.
— Izzy

Lo malo, no lo sabía, pero cuando probé en mi Debian, el comando siguió ejecutándose después de cerrar el shell que lo lanzó: /
— Flinth

1
No estoy seguro de dónde está conectado exactamente el proceso en segundo plano y cuándo. Pero si, por ejemplo, inicia sesión en una máquina remota, definitivamente se detendrá tan pronto como cierre la sesión (excepto si se demonizó a sí mismo). Por lo tanto, para estar 100% seguro, prefiere usar nohup, que también registra todos los resultados (ahora invisibles) en un archivo llamado nohup.outubicado en el directorio desde el que inició el comando.
— Izzy

Bien, gracias por tus explicaciones ^^
— Flinth

Esta respuesta podría funcionar bien cuando se combina con el jobscomando. Muy a menudo quiero poder volver al proceso de shell después de ponerlo en segundo plano.
— djangofan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.