La tubería rota de SSH mata el proceso en primer plano

La tubería rota de SSH mata el proceso en primer plano

Tengo 2 hosts a los que puedo conectar a través de SSH. En un host, después de un tiempo, aparece el error. Write Failed: broken pipe.En el otro host, no aparece este error.

No entiendo por qué en un host tengo este problema y en otro host todo está bien.

Entonces, configuré una conexión SSH con tmux y dentro del host remoto ejecuto un proceso en primer plano (celeryd). Pero, incluso cuando la sesión SSH falla y me vuelvo a conectar a la sesión cancelada, el proceso en primer plano ha muerto.

Me gustaría que el proceso en primer plano no se interrumpa cuando se interrumpa la conexión SSH. Entonces, solo tengo 2 soluciones:

  1. saber cómo evitar tuberías rotas SSH, o
  2. Sepa cómo evitar que el proceso muera cuando se caiga la conexión SSH.

¿Puede alguien ayudarme con esto?

Respuesta1

No sé qué sucede con tu conexión SSH, pero ¿probablemente un enlace de red defectuoso? Puedes intentar usarMOSH, que es más robusta que una conexión SSH normal. Especialmente si la red es el problema.

Si no puede arreglar la conexión, puede intentar usarla nohupdelante de su comando o simplemente nohup tmuxver si eso cambia algo.

nohup: ejecuta un comando inmune a los bloqueos, con salida a un archivo que no es tty

SINOPSIS
nohup COMANDO [ARG]...
nohup OPCIÓN

Respuesta2

Me he encontrado con este problema solo unas pocas veces. Para mí lo que causaría la rotura de la tubería fue una ruta faltante. Solo ocurrió al conectarse desde una máquina física en la red principal a una VM en una red diferente detrás de un Nat.

Verificaría si hay problemas de red para ver si se puede evitar que se rompan las tuberías.

Si no puede encontrar la causa del problema, puede usar algo como screen o tmux para mantener una terminal abierta incluso si está desconectado. Luego puede volver a conectarse y conectarse a la pantalla o sesión tmux y su proceso seguirá ejecutándose y activo.

Respuesta3

La causa más común de desconexiones de ssh para mí ha sido la falta de mantenimiento. Se puede configurar en el cliente ssh. Con ssh, sería "-oTCPKeepAlives=yes"

Con respecto a los programas que se ejecutan después de que ssh se haya cerrado, cuando ejecuta un programa en el shell, es un proceso hijo de la instancia del shell. Una vez que se cierra, los niños también cierran. Puede intentar ejecutar su programa con un & al final, lo que generaría un proceso diferente. Acabo de hacer una prueba rápida y el proceso parece continuar después de desconectar la conexión ssh.

información relacionada