¿Cómo ejecutar un script a través de SSH que no termina cuando cierro la conexión?


18

Necesito ejecutar el script, que lleva mucho tiempo ejecutarlo, o solo quiero que se ejecute para siempre. No puedo simplemente SSH en mi máquina, porque cuando me desconecto deja de funcionar.

¿Hay alguna forma de ejecutar un script que no dependa del shell que lo inició?

Estoy usando Ubuntu 9.04.

Respuestas:


24

Puede ejecutar el comando con el comando nohup anterior. También puede ejecutarlo en 'pantalla', lo que le permitirá volver a conectar el terminal.

Por ejemplo:

ssh mySever 'nohup bash myscript.sh'

O simplemente ssh y ejecuta el comando nohup. Debería seguir funcionando incluso cuando se desconecta. Esto se debe a que el nohup interceptará el SIGHUP singal (hangup).

La pantalla es un poco más complicada, pero durante los 20 minutos que puede llevarle aprender los conceptos básicos, es una de las herramientas más útiles que existen. Aquí hay un tutorial .


Sniped por Kyle ...> sonrisa <
Evan Anderson

+1 a cualquiera que dispare a Evan. Happy 10K :)
squillman

1
el enlace al tutorial está roto :(
Ido Ran

7

Siempre uso nohup. Si me importa el resultado, lo redirijo a un archivo de registro; de lo contrario, lo envío a / dev / null.

Ejemplo:

nohup scp file.tar.gz root@someserver:/var/tmp > /dev/null 2>&1 &

Eso lo pone en segundo plano, con salida yendo a / dev / null, y es inmune a la señal HUP si cierra la sesión. También puede "rechazar" el trabajo con ciertos shells (como bash) para que no esté conectado a su sesión.

disown %1

1
+1 para rechazar: muy útil cuando se olvida de ejecutar usando nohup
Mark

5

Para instalar la pantalla: apt-get install screen

Luego inicie usando simplemente: screen

Y man screenpara obtener la clave vinculante.


+1! la pantalla es da cosa!
Javier

Solía ​​usar la pantalla, pero he cambiado a tmux por varias razones. Google "tmux vs pantalla" y encontrará algunos enlaces de esta manera: superuser.com/questions/236158/tmux-vs-screen
m0j0

2

Mientras está conectado a un servidor, puede ejecutar un script en modo separado mediante el siguiente comando:

nohup script >script.out 2>script.err &

Más tarde, cuando inicie sesión nuevamente, puede verificar script.out para cualquier salida y script.err para cualquier mensaje de error. Si desea mensajes de salida y error en el mismo archivo, haga lo siguiente:

nohup script >script.out 2>&1 &
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.