Non riesci a riprendere lo schermo, dice che sono già collegato?


151

Sto lavorando su un server Debian Jessie remoto. Ho avviato una sessione dello schermo, iniziato a eseguire uno script, quindi sono stato disconnesso da un timeout di rete.

Ora ho effettuato nuovamente l'accesso e voglio riprendere la sessione.

Questo è quello che vedo quando elenco le schermate:

$ screen -ls
There are screens on:
    30608.pts-8.myserver    (11/03/2015 08:47:58 AM)    (Attached)
    21168.pts-0.myserver    (11/03/2015 05:29:24 AM)    (Attached)
    7006.pts-4.myserver (10/23/2015 09:05:45 AM)    (Detached)
    18228.pts-4.myserver    (10/21/2015 07:50:49 AM)    (Detached)
    17849.pts-0.myserver    (10/21/2015 07:43:53 AM)    (Detached)
5 Sockets in /var/run/screen/S-me.

Mi sembra di essere collegato a due schermi contemporaneamente.

Ora voglio riprendere la sessione che stavo eseguendo prima, per vedere i risultati del mio script:

$ screen -r 30608.pts-8.myserver
There is a screen on:
    30608.pts-8.OpenPrescribing (11/03/2015 08:47:58 AM)    (Attached)
There is no screen to be resumed matching 30608.pts-8.myserver.

Perché non riesco a ricollegare?

Ho lo stesso problema con l'altro schermo:

$ screen -r 21168.pts-0.myserver
There is a screen on:
    21168.pts-0.OpenPrescribing (11/03/2015 05:29:24 AM)    (Attached)
There is no screen to be resumed matching 21168.pts-0.myserver.

Risposte:


242

La sessione è ancora collegata su un altro terminale. Il server non ha rilevato l'interruzione di rete su quella connessione: rileva l'interruzione solo quando tenta di inviare un pacchetto e riceve un errore o nessuna risposta dopo un timeout, ma questo non è ancora avvenuto. Sei in una situazione comune in cui il client ha rilevato l'interruzione perché ha tentato di inviare alcuni input e non è riuscito, ma il server è semplicemente seduto lì in attesa di input. Alla fine il server invierà un pacchetto keepalive e rileverà che la connessione è interrotta.

Nel frattempo, usa l' -dopzione per staccare la sessione dello schermo dal terminale in cui si trova.

screen -r -d 30608

screen -rd è praticamente il modo standard di collegarsi a una sessione schermo esistente.


15
Per collegarsi a una sessione dello schermo esistente, è screen -x, screen -rdè collegarsi ad esso dopo averlo staccato da ogni terminale a cui era collegato. Nel caso del PO, concordo sul fatto che quest'ultimo sia probabilmente preferito, ma nel caso generale, non necessariamente. In genere uso -xRper allegare o creare se non c'è nulla da allegare.
Stéphane Chazelas,

10

Secondo il manuale è possibile "riprendere" solo schermate staccate :

' [match] ' ' [match] ' Non avvia la schermata, ma stampa invece un elenco di stringhe di identificazione della sessione (di solito nel formato pid.tty.host; vedi Nome sessione). Le sessioni contrassegnate come "staccate" possono essere riprese con . Quelli contrassegnati come 'attaccati' sono in esecuzione e hanno un terminale di controllo. Se la sessione viene eseguita in modalità multiutente, viene contrassegnata come "multi". Le sessioni contrassegnate come "irraggiungibili" vivono su un host diverso o sono morte. Una sessione non raggiungibile è considerata morta, quando il suo nome corrisponde al nome dell'host locale o al parametro specificato, se presente. Vedi il-ls
-list
screen -r-rflag per una descrizione su come costruire corrispondenze. Le sessioni contrassegnate come "morte" devono essere accuratamente controllate e rimosse. Chiedi al tuo amministratore di sistema se non sei sicuro. Rimuovi le sessioni con l' -wipeopzione ' '.

Quello che vuoi è questa opzione:

' -x'
Allega a una sessione che è già collegata altrove (modalità multi-display). Lo schermo si rifiuta di collegarsi dall'interno di se stesso. Ma quando si collegano in cascata più schermi, i loop non vengono rilevati; stai attento.


4
Con -xuna sessione verrà comunque allegato "da qualche parte". Per assumere completamente la sessione si dovrebbe usare -d | -D (opzioni di distacco) insieme a -r | -R (opzioni di riattacco).
Andrew Kozlov,

1
Questa è un'alternativa, ma potrebbe non essere ciò di cui ha bisogno il PO. Mi associo spesso da più posizioni.
Thomas Dickey,

4

Mi collego allo schermo con le opzioni -rD

Dal manuale:

-D -r
Reattach a session. If necessary detach and logout remotely first. 
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.