Por qué los programas se detienen cuando SSH se cae
Un programa que inicias en una sesión SSH queda atado a la terminal de esa sesión. Cuando la conexión termina, la terminal se cierra y el programa normalmente recibe una señal de hangup y se detiene. tmux mantiene la terminal en el servidor, así que la conexión puede ir y venir.
tmux tiene que ejecutarse en el servidor, no en tu portátil. Instálalo con sudo apt install tmux o sudo dnf install tmux.
Los comandos que necesitas
| Tarea | Comando |
|---|---|
Unirte a la sesión work, o crearla | tmux new -A -s work |
| Separarte y dejarla en marcha | Ctrl+b, luego d |
| Listar sesiones | tmux ls |
| Unirte a una sesión existente | tmux attach -t work |
| Iniciar una sesión en segundo plano | tmux new -d -s work |
| Terminar una sesión | tmux kill-session -t work |
| Terminar todas las sesiones | tmux kill-server |
| Desplazarte hacia atrás | Ctrl+b, luego [, y q para salir |
tmux new -A -s work es el que hay que recordar, porque funciona exista o no la sesión. También puedes ir directo desde tu propia máquina:
ssh -t user@server tmux new -A -s work
La opción -t es obligatoria, porque tmux necesita una terminal.
Cómo es una desconexión real
Iniciamos un bucle dentro de tmux y luego matamos el cliente SSH con kill -9 para imitar una conexión perdida. Desde un nuevo inicio de sesión:
$ tmux ls
work: 1 windows (created Tue Nov 3 18:22:28 2026)
(attached) ha desaparecido de la línea, porque no hay ningún cliente conectado, y el bucle seguía escribiendo en su archivo. Cuando no existe ninguna sesión, tmux ls dice no server running on /tmp/tmux-1000/default. Eso significa que tus sesiones terminaron, por ejemplo tras un reinicio.
tmux no sobrevive a un reinicio del servidor. También muere al cerrar sesión si el sistema mata los procesos del usuario, con KillUserProcesses=yes en logind.conf. Debian y Ubuntu lo traen desactivado. Si tu tmux muere cada vez que cierras sesión, vuelve a ponerlo en no.
Sin tmux: nohup
Para un solo trabajo al que no necesitas volver a ver la pantalla:
nohup ./job.sh > job.log 2>&1 &
En nuestra prueba iniciamos tres trabajos en una sesión y cerramos la conexión. El trabajo con nohup terminó y escribió su log. El trabajo normal en segundo plano con & y el de primer plano murieron.
Si ya iniciaste un trabajo con & y olvidaste nohup, este comando interno de bash lo protege de la señal de hangup:
disown -h %1
Su salida sigue yendo a la terminal antigua, así que un trabajo que escribe mucho en pantalla puede fallar cuando te vayas. Con ambos métodos no hay forma de interactuar con el trabajo más tarde.
Con systemd: systemd-run
Si tienes sudo, puedes ejecutar el trabajo como un servicio temporal. Queda entonces totalmente separado de tu sesión y systemd conserva su salida:
sudo systemd-run --unit=longjob /usr/local/bin/job.sh
systemctl status longjob
journalctl -u longjob -f
Se ejecuta como root salvo que añadas --uid=user, y arranca en / salvo que indiques una carpeta con --working-directory=, así que usa rutas completas.
Cuando el trabajo termina con éxito, la unidad desaparece: en nuestra prueba systemctl status longjob decía entonces Unit longjob.service could not be found, pero journalctl -u longjob seguía mostrando la salida. Un trabajo fallido permanece en la lista hasta que ejecutes sudo systemctl reset-failed longjob.
Cuál usar
- tmux para trabajo interactivo: editores, shells de bases de datos, cualquier cosa a la que quieras volver.
- nohup para un trabajo en un servidor donde no puedes instalar nada.
- systemd-run para un trabajo largo que quieres registrado y separado de tu sesión.
Si la propia conexión se cae una y otra vez, mira Broken pipe y keep-alive. tmux protege tu trabajo, y los ajustes de keep-alive hacen que las caídas sean menos frecuentes. En una red que cambia a menudo, Mosh con tmux en el servidor mantiene tanto la conexión como el trabajo.
Preguntas
¿Cómo vuelvo a tmux después de una desconexión SSH?
Inicia sesión de nuevo y ejecuta tmux attach -t work, o tmux new -A -s work, que además crea la sesión si ya no existe. tmux ls lista las sesiones que siguen activas.
¿tmux sobrevive a un reinicio del servidor?
No. tmux es un proceso normal en el servidor, así que un reinicio cierra todas las sesiones. Para un trabajo que debe volver a arrancar tras un reinicio, usa un servicio de systemd.
¿Por qué desaparece mi sesión de tmux al cerrar sesión?
Seguramente el sistema mata los procesos del usuario al salir, con KillUserProcesses=yes en /etc/systemd/logind.conf. Ponlo en no y reinicia systemd-logind o el servidor.
¿Cómo dejo un comando en marcha al cerrar SSH sin tmux?
Arráncalo con nohup ./job.sh > job.log 2>&1 &. Sigue después de salir y escribe su salida en job.log, pero no puedes volver a su pantalla.
¿Necesito tmux en mi propio ordenador?
No. tmux tiene que ejecutarse en el servidor. Tu ordenador solo necesita un cliente SSH.