2012-02-11 16 views
16

Estoy tratando de iniciar un servidor de prueba a través de ssh, pero siempre muere una vez que me desconecto de ssh.Ejecutar un proceso persistente a través de ssh

¿Hay alguna manera de iniciar un proceso (ejecutar el servidor) para que no muera al final de mi sesión ssh?

Respuesta

17

Como alternativa al nohup, puede ejecutar su aplicación remota dentro de un terminal multiplexor, como GNU screen o tmux.

El uso de estas herramientas facilita la reconexión a una sesión desde otro host, lo que significa que puede iniciar una compilación larga o descargar antes de salir del trabajo y verificar su estado cuando llegue a casa. Por ejemplo. Encuentro esto particularmente útil al hacer trabajos de desarrollo en servidores que son muy remotos (en un país diferente) con conectividad no confiable entre ellos y yo, si la conexión se cae, simplemente puedo volver a conectar y continuar sin perder ningún estado.

+1

Ejemplo: El uso de ssh y pantalla para crear Sesiones terminales persistentes accesibles desde casi cualquier lugar http://bit.ly/1ewxKKv – Jon

4

Sí; puede usar the nohup command para tragar la señal HUP ("colgar") que se envía a su programa cuando cuelga su sesión SSH.

Alternativamente, si está escribiendo el servidor usted mismo, puede codificarlo en register a handler para la señal HUP y tragarlo dentro del programa (en lugar de usar un programa externo nohup que hace lo mismo).

3

Como alternativa a nohup, screen, et al. puede revisar su servidor para invocar daemon para desconectarlo de la terminal. Esta es la forma idiomática de escribir servicios para Linux.

Véase también daemon(3).

4

Además de las otras respuestas, usted podría comenzar su servidor de prueba a través de batch (o at), sino como Brian answered debe llamar daemon

Y se podría pasar la opción -f a ssh

+3

Gracias. Me guardaste el día para la opción '-f' para ssh. –

3

Si' re SSHing a una distribución de Linux que tiene systemd, puede usar systemd-run para iniciar un proceso en segundo plano (en términos de systemd, "un servicio transitorio"). Por ejemplo, suponiendo que desea hacer ping algo en el fondo:

systemd-run --unit=pinger ping 10.8.178.3 

El beneficio que obtendrá con systemd sobre sólo corriendo un proceso con nohup es que systemd hará un seguimiento del proceso y de los niños, mantener los registros, recuerde el código de salida y le permite matar limpiamente el proceso y todos sus elementos secundarios. Ejemplos:

ver el estado y las últimas líneas de salida:

systemctl status pinger 

corriente de la salida:

journalctl -xfu pinger 

muertes:

systemctl kill pinger 
Cuestiones relacionadas