Hacer que la pantalla GNU sobreviva al reinicio

18

Estoy usando mucho la pantalla GNU. Me resulta muy molesto que cada vez que se debe reiniciar el servidor pierdo todas mis sesiones (incluso si lo sé de antemano, necesito configurar todo de nuevo).

He buscado en la web posibilidades de cómo hacer que la pantalla sobreviva al reinicio, pero no encontré nada que funcione para mí. Algunos de los métodos que encontré y hay fallas:

  • CryoPID : parece estar muerto, prometiendo desde 2005 incluir soporte para pantalla
  • DMCTP : tiene problemas con setuid (), no funcionó para mí (admito que no lo intenté mucho)
  • algún script que intenta recrear la sesión desde cero; aún pierdes tu historial y creo que también las variables de entorno no están configuradas correctamente (y cuando lo intenté no aparecieron todas las sesiones)

¿Quizás alguien conoce un mejor congelador de procesos? Esta parece ser la forma más prometedora.

fuenfundachtzig
fuente
Tal vez debería hibernar en lugar de reiniciar :-) Recuerdo que usé DMCTP hace mucho, mucho tiempo y funcionó (IIRC, pero no estoy seguro ...)
perezoso
1
Bueno, en la mayoría de los casos, sus actualizaciones de kernel o reemplazos de hardware que obligan a reiniciar. (Lo cual no depende de mí de todos modos ...) - DMCTP: estaría interesado en cómo hacerlo funcionar sin recompilar la pantalla (como se sugiere en Internet).
fuenfundachtzig
1
Estoy usando tmux en lugar de screen y me resulta más fácil escribir scripts de sesión. Eso no "guarda" su sesión, pero puede enviar fácilmente comandos a tmux para hacer su diseño y enviar 'pulsaciones de teclas' al cliente para que pueda cambiar el directorio e iniciar aplicaciones si es necesario. Estoy seguro de que también puedes hacerlo en la pantalla, pero parece más fácil con tmux

Respuestas:

13

No hay forma de guardar una sesión de pantalla de la manera que desee. Lo que hice fue la siguiente mejor opción: autossh programado para conectarme a mis servidores y configurar mi equipo de la manera que me gusta.

Quiéralo.

Conexión local inactiva, espero, vuelve a funcionar y ahí está mi trabajo (uso pantallas anidadas). Servidor apagado o reiniciado, espero y vuelvo a mi posición predeterminada. Esto me da la sensación de continuidad que deseaba.

De todos modos, hice esta pregunta exacta hace años en la lista de pantallas.

Resumen: No busques vida eterna para la pantalla. En cambio, aprende a resucitar.

Esta es la carne de la configuración .screenrc:

Hay un ejemplo, rscreen, en el paquete autossh que modifiqué en el programa econnect.

El parámetro --esc es establecer el escape de la pantalla remota en algo diferente (mi escape es `)

#add much much more scrollback
defscrollback 10000

# make some default windows

screen -t ADMIN     1
chdir /Users/chiggsy/Sites/
screen -t SITES    2
chdir /Users/chiggsy/src/
screen -t SRC 3
chdir
screen -t FERGUS  4 /Users/chiggsy/bin/econnect --host host.example.com --port 50000 --esc g --user sol
screen -t LAEG 5  /Users/chiggsy/bin/econnect --host host.example2.com --port 505000  --esc g --user invictus

screen -t ROOT      0   sudo su -m
chiggsy
fuente
2

Ver: http://skoneka.github.io/screen-session/

Available screen-session modes: 

---- 
save              - save Screen ( and VIM ) session 
load              - load session 
ls                - list saved sessions 
---- 

dump              - print detailed informations about windows in the session 
group             - move windows to a group 
layoutlist        - display a list of layouts 
layout-checkpoint - record a snapshot of the current layout. 
layout-history    - display saved snapshots of the current layout 
layout-redo       - load a snapshot of the current layout, 
layout-undo       - load a snapshot of the current layout, 
layout-zoom       - zoom into and out of a region 
kill              - send SIGTERM to last the process started in a window 
kill-zombie       - kill all zombie windows in the session 
kill-group        - recursively kill all windows in a group 
manager           - sessions manager (screenie like) but featuring session 
                    preview in a split window 
nest-layout       - copy a layout to the current region 
new-window        - start a new Screen window in the same working directory 
                    on the position next to the current window 
name              - get or set the sessionname 
regions           - display a number in every region (like tmux display-panes) 
renumber          - renumber windows to fill gaps 
subwindows        - recursively print windows contained in groups 
Erik Aronesty
fuente
2

En Server Fault, la misma pregunta recibió una pista que falta aquí: usar tmuxcon tmux-resurrect , que es:

Restaurar el tmuxentorno [s] después de reiniciar el sistema.

Lo que puede restaurar para usted:

  • todas las sesiones, ventanas, paneles y su orden
  • directorio de trabajo actual para cada panel
  • diseños de panel exactos dentro de las ventanas (incluso cuando se amplía)
  • sesión activa y alternativa
  • ventana activa y alternativa para cada sesión
  • ventanas con foco
  • panel activo para cada ventana
  • "sesiones agrupadas" (característica útil cuando se usa tmux con múltiples monitores)
  • programas que se ejecutan dentro de un panel! Más detalles en los programas de restauración doc .
serv-inc
fuente