C'è un modo per far sopravvivere il riavvio di una sessione "Schermo"?


25

Sto usando l' utilità Schermo e vorrei preservare la sessione al riavvio della macchina. Se non è possibile, puoi consigliare altre alternative a Screen che consentano di preservare le sessioni tra i riavvii.

Sto usando Ubuntu Server 10.04 (Lucid Lynx) se questo è importante.

Ho diverse sessioni aperte tramite schermo. Quando la macchina si riavvia, tutte quelle sessioni vengono perse e devo riaprirle di nuovo. Volevo trovare un modo per preservare quelle sessioni sullo schermo.


cosa stai cercando di fare? vuoi preservare la cronologia o tutto ciò che è in esecuzione nella tua sessione schermo?
Marcel G,

1
Fare questa sconfitta non avrebbe lo scopo di riavviare?
Brian Knoblauch,

cosa intendi per "sessioni"? Vuoi dire che hai connessioni ssh ad altri host in diverse finestre dello schermo? Se questo è ciò che vuoi dire, quindi scrivere un file .screenrc e specificare l'utente @ host a cui vuoi eseguire il login dovrebbe fare il trucco ..., se hai abilitato gli accessi ssh senza password. Quindi, quando si avvia la schermata, verranno automaticamente avviate tutte le connessioni ssh. Potresti anche avviarlo da rc.local (un po 'complicato, perché è necessario avviarlo da su - tuonomeutente), quindi quando accedi puoi ricollegare la sessione dello schermo in esecuzione.
natxo asenjo,

1
ancora più importante, perché riavvii continuamente? I server Unix non sono server Windows, sono progettati per tempi di attività elevati, è noto che le macchine hanno tempi di attività di anni (senza patch di sicurezza del kernel). Se il riavvio è dovuto alle patch di sicurezza del kernel, dai un'occhiata a qualcosa come ksplice.
The Unix Janitor

Risposte:


16

Prima di tutto, chiariamo un paio di cose importanti:

  1. Quante macchine sono coinvolte? In altre parole, ti stai collegando a un computer remoto o è tutto sul tuo computer locale?
  2. Se è coinvolta una macchina remota, quale macchina si riavvia: è il server o il client?

Se è coinvolta una macchina o se il server viene riavviato, allora sei per lo più sfortunato.

Se si accede a un computer remoto, ma è necessario riavviare il computer locale, non è un problema finché si esegue lo schermo sul computer remoto anziché sul computer locale. Mi rendo conto che questo è abbastanza ovvio per qualsiasi utente esperto (anche leggermente esperto) dello schermo, ma lo menziono nel caso in cui possa essere utile.

Ancora un'altra possibilità (ancora una volta, se questo è utile per te dipende dalle circostanze) è quella di eseguire la macchina con lo schermo su una macchina virtuale. Supponiamo che sia un server fisico remoto e debba essere riavviato, ma ha un SO guest su (es.) VMware. È possibile sospendere il sistema operativo guest e riavviarlo dopo il riavvio dell'hardware. Tutto dipende dal motivo per cui è necessario riavviare, che non è stato specificato, e da quanto controllo si ha sulla macchina e se si è disposti a risolvere tutti questi problemi.

Non esiste una soluzione FACILE ed è possibile che nessuna delle soluzioni funzioni per te. Ma buona fortuna.

Se stai accedendo a molte macchine, potrebbe sembrare troppo complicato eseguire lo schermo su tutte le macchine remote separatamente, e lo è. In questo caso è utile disporre di una schermata di macchina intermedia, che può avere molte finestre di schermo, ciascuna collegata a un'altra macchina remota. Finché la macchina intermedia rimane accesa, puoi riavviare la tua macchina locale (o metterla nella borsa e portarla a casa per la notte, o qualsiasi altra cosa) e lo schermo continua a funzionare sulla macchina intermedia. (E ovviamente se una delle macchine remote si interrompe, si perde la connessione a quella macchina, ma il resto delle sessioni dello schermo va bene.)

Ma molto probabilmente ti riferisci al computer remoto o all'unico computer che viene riavviato, nel qual caso non esiste un modo semplice per farlo. CryoPID all'inizio sembra promettente, ma il suo sito web dice che non funziona per lo schermo.

Ma c'è un'altra opzione un po 'promettente che vale la pena esplorare. (Se funzionerà per te dipende in larga misura esattamente quello che stai cercando di fare.) Dai un'occhiata a github.com: https://github.com/skoneka/screen-session/tree/master/ScreenSession/


+1 per cryoPID, non lo sapevo!
The Unix Janitor

ScreenSession sembra interessante, dalla descrizione di questo è esattamente quello che volevo
Sergey G,

5

In alcune rare circostanze questo è possibile (vedi CryoPID o CryoPID2 ), ma in generale questo è difficile, quindi non può essere fatto.


Il collegamento è interrotto.
Kasperd,

4

Invece di usare lo schermo, usa una piccola VM Virtualbox e lavora al suo interno. Quindi puoi semplicemente ibernarlo, riavviare l'host, quindi riattivare la VM (proprio come chiudere e riaprire il coperchio di un laptop). Le connessioni SSH agli host remoti probabilmente non persisteranno con questo metodo, non credo che sarebbe possibile garantirlo.


In realtà vorrei aggiornare la mia risposta a tmux-resurrect
Gaius

tmux-resurrect sembra un'ottima soluzione.
serv-inc,


1

In tutto questo, lo schermo stesso è piuttosto marginale. Non è Screen che vuoi "salvare", vero ?, ma gli ambienti all'interno delle varie sessioni dello schermo, qualunque essi siano.

Sembra che tu stia suggerendo che il salvataggio di una sessione dello schermo riguarderebbe un processo SSH al suo interno e ogni sorta. Ciò che sta funzionando all'interno di Screen non è affatto affare di Screen, e quelle sono cose che sarebbe difficile "salvare" ... qualunque cosa significhi davvero se implementabile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.