¿Hay alguna manera de hacer que una sesión de "Pantalla" sobreviva al reinicio?

25

Estoy usando la utilidad Screen y me gustaría preservar la sesión cuando la máquina se reinicie. Si no es posible, puede recomendar otras alternativas a Screen que permitan preservar las sesiones entre reinicios.

Estoy usando Ubuntu Server 10.04 (Lucid Lynx) si eso es importante.

Tengo varias sesiones abiertas a través de la pantalla. Cuando la máquina se reinicia, todas esas sesiones se pierden y tengo que volver a abrirlas. Quería encontrar una manera de preservar esas sesiones de pantalla.

Sergey G
fuente
que estas tratando de hacer ¿Desea preservar el historial o todo lo que se ejecuta en su sesión de pantalla?
Marcel G
1
¿No sería esto derrotar el propósito de reiniciar?
Brian Knoblauch
¿Qué quieres decir con 'sesiones'? ¿Quiere decir que tiene conexiones ssh a otros hosts en varias ventanas de pantalla? Si eso es lo que quiere decir, entonces escribir un archivo .screenrc y especificar el usuario @ host con el que desea iniciar sesión debería hacer el truco ..., si ha habilitado los inicios de sesión ssh sin contraseña. Luego, cuando inicie la pantalla, todas las conexiones ssh se iniciarán automáticamente. Incluso podría iniciarlo desde rc.local (un poco complicado, porque necesita iniciarlo desde su - su nombre de usuario), de modo que cuando inicie sesión puede volver a conectar la sesión de la pantalla en ejecución.
natxo asenjo
1
Más importante aún, ¿por qué reinicia todo el tiempo? Los servidores Unix no son servidores Windows, están diseñados para tiempos de actividad elevados, se sabe que las máquinas tienen tiempos de actividad de años (sin parches de seguridad del núcleo). Si reinicia debido a parches de seguridad del kernel, eche un vistazo a algo como ksplice.
El conserje de Unix el

Respuestas:

16

En primer lugar, aclaremos un par de cosas importantes:

  1. ¿Cuántas máquinas están involucradas? En otras palabras, ¿se está conectando a una máquina remota o está todo en su máquina local?
  2. Si hay una máquina remota involucrada, ¿qué máquina se está reiniciando: es el servidor o el cliente?

Si hay una máquina involucrada, o si el servidor se está reiniciando, la mayoría de las veces no tiene suerte.

Si está iniciando sesión en una máquina remota, pero necesita reiniciar su máquina local, entonces no hay problema siempre que esté ejecutando la pantalla en la máquina remota en lugar de en su máquina local. Me doy cuenta de que esto es bastante obvio para cualquier usuario experimentado (incluso un poco experimentado) de la pantalla, pero lo menciono en caso de que pueda ser útil.

Otra posibilidad más (una vez más, si esto es útil para usted depende de sus circunstancias) es ejecutar la máquina con pantalla en una VM. Supongamos que es un servidor físico remoto y necesita reiniciarse, pero tiene un sistema operativo invitado en (por ejemplo) VMware. Puede suspender el sistema operativo invitado e iniciarlo nuevamente después de reiniciar el hardware. Todo depende de por qué necesita reiniciar, lo que no se especificó, y cuánto control tiene sobre la máquina, y si está dispuesto a meterse en todos esos problemas.

No existe una solución FÁCIL, y es posible que ninguna de las soluciones funcione para usted. Pero la mejor de las suertes.

Si está iniciando sesión en muchas máquinas, puede parecer demasiado doloroso ejecutar la pantalla en todas las máquinas remotas por separado, y lo es. En este caso, es útil tener una pantalla de funcionamiento de la máquina intermedia, que puede tener muchas ventanas de pantalla, cada una conectada a otra máquina remota. Mientras la máquina intermedia permanezca activa, puede reiniciar su propia máquina local (o empacarla en su bolso y llevarla a casa por la noche, o lo que sea) y la pantalla sigue funcionando en la máquina intermedia. (Y, obviamente, si alguna de las máquinas remotas se cae, pierde la conexión con esa máquina, pero el resto de sus sesiones de pantalla están bien).

Pero lo más probable es que se refiera a la máquina remota o a la única máquina que se reinicia, en cuyo caso no hay una manera simple de hacerlo. CryoPID suena prometedor al principio, pero su sitio web dice que no funciona para la pantalla.

Pero hay otra opción algo prometedora que vale la pena explorar. (Si funcionará para usted depende en gran medida exactamente de lo que está tratando de hacer). Mire esto en github.com: https://github.com/skoneka/screen-session/tree/master/ScreenSession/

iconoclasta
fuente
¡+1 para cryoPID, no sabía eso!
El conserje de Unix el
ScreenSession parece interesante, por la descripción de esto, esto es exactamente lo que quería
Sergey G el
5

En algunas circunstancias excepcionales esto es posible (ver CryoPID o CryoPID2 ), pero en general esto es difícil, por lo que no se puede hacer.

pjz
fuente
El enlace está roto.
kasperd
4

En lugar de usar la pantalla, use una VM Virtualbox pequeña y trabaje dentro de eso. Luego puede hibernarlo, reiniciar el host y luego volver a activar la VM (al igual que cerrar y volver a abrir la tapa de una computadora portátil). Las conexiones SSH a hosts remotos probablemente no persistirán con este método, no creo que sea posible garantizarlo.

Gayo
fuente
En realidad, me gustaría actualizar mi respuesta a tmux-resurrect
Gaius
tmux-resurrect parece una muy buena solución.
serv-inc
4

No puedes. Ciertamente no en la misma máquina

Crankyadmin
fuente
¿Qué significa "No puedo hacer" ?
Peter Mortensen el
1

En todo esto, la pantalla en sí es bastante marginal. No es la pantalla lo que quieres "guardar", ¿verdad ?, sino los entornos dentro de las diferentes sesiones de pantalla, sean cuales sean.

Parece estar sugiriendo que guardar una sesión de Screen cubriría un proceso SSH en su interior y todo tipo. Lo que se está ejecutando dentro de Screen no es asunto de Screen en absoluto, y esas son cosas que serían difíciles de "salvar" ... lo que eso realmente significaría si fuera implementable.

Chris Phillips
fuente