Se siete soliti utilizzare ssh per collegarvi a macchine remote vi sarà sicuramente capitato di voler terminare la sessione lasciando un programma di esecuzione: dando il semplice exit tutti i programmi lanciati durante la sessione vengono terminati senza pietà, costringendoci a lasciare aperta la sessione o…usare GNU screen.
screen è un “moltiplicatore di terminali” che ci permette di sfruttare una sessione di shell in modo più proficuo: possiamo gestire più terminali, “sganciare” un processo dalla sessione, “riagganciarlo” e più in generale ci garantisce una flessibilità impareggiabile.
I comandi per avviarlo sono molto semplici
Caso d’uso? rtorrent su una macchina raggiungibile con ssh: effettuo la connessione, lancio screen rtorrent, premo ctrl+a e poi d, exit. Quando vorrò ricontrollare lo stato dei miei download non dovrò far altro che collegarmi nuovamente con ssh e digitare screen -r. Comodo vero?
JJJJJJJ
20 ott 2007 - 09:48 - #1 (nascondi)Che ridicolo!! Non e’ assolutamente necessario!! Per mettere in background la sessione aperta con ssh nel computer remoto basta usare questo carattere di escape: ~^& che tradotto in parole povere significa che dovete premere esc POI invio POI ~& (dovete proprio digitare il carattere “tilde” e il carattere “and”) questo vi diconnettera’ dall’host remoto e lascera’ le applicazioni in esecuzione in background.
JJJJJJJ
20 ott 2007 - 09:49 - #2Correggo la definizione di carattere di escape non e’: ~^& ma solo ~& ciao
depaloan
20 ott 2007 - 09:57 - #3Ti assicuro che con screen è tutto molto più comodo…
kionez
20 ott 2007 - 10:16 - #4beh.. screen non e’ solo quello.. anzi, direi che e’ sfruttato allo 0,01% in questo post…
pensate alla possibilita’ di lavorare in due alla stessa shell (screen -x).. ottimo in caso di “teleassistenza” o training che dir si voglia..
pensate alla possibilita’ di avere un ambiente remoto multiterminale sempre disponibile.. soprattutto in caso di server, dove non esiste interfaccia grafica (e quindi niente konsole, gnome-terminal, mrxvt e compagnia bella..).. in piu’ e’ “lock-abile” (^a - x).. si possono elaborare i buffer (^a - esc) e altre millemila possibilita’..
insomma… e’ uno dei tool piu’ utili per un sysadmin :)
hronir
20 ott 2007 - 10:17 - #5Io se faccio Ctrl+D per uscire dalla macchina in remoto trovo che i processi in background che avevo lanciato non terminano.
I processi terminano se la connessione si interrompe (SIGHUP) per cause improvvise (caduta della rete o interruzione della shell locale con cui ero collegato alla macchina remota). Per proteggere il processo in background dall’interruzione dovuta a SIGHUP si può usare (almeno in bash, non so in altre shell) il comando
disown [-h]
Ciao!
marione
20 ott 2007 - 10:22 - #6ottimo! sempre in tema di ovvieta’ perche’ non ci spieghi come usare il comando ls?
^-Super_Treje-^
20 ott 2007 - 10:36 - #7Personalmente uso nohup quando devo lasciare qualche programma in esecuzione ma voglio chiudere una shell sia sul mio pc che su uno remoto anche se riprenderla dal background non mi pare che sia possibile.
Cmq mi basta per il momento anche solo nohup.
Bye.
Marco Fabbri
20 ott 2007 - 10:50 - #8Eh eh anche io utilizzo l’accoppiata screen - rtorrent, e’ molto utile (come anche screen wget). Una opzione comoda di screen e’ “-S nomesessione” in modo da ottenere il nome di una sessione che puo’ essere utilizzato “facilmente” per richiamare la sessione con “-r nomesessione”. Il comportamento (keybindings, disconnessione e terminazione programmi, et cetera) di screen e’ estremamente personalizzabile tramite i file /etc/screenrc e /home/nomeutente/.screenrc le cui impostazioni sono ampiamente documentate nel manuale di screen.
Muzero
20 ott 2007 - 12:04 - #9Ha ragione super treje, basta il comando nohup per avere lo stesso effetto.
Esempio:
$ nohup sh mioscript.sh
e possiamo chiudere la shell senza problemi :)
jimme
20 ott 2007 - 14:37 - #10Quanta gente in vena di fare i saputelli oggi!
Quelli che dicono che noup, ctrl-D , ~& e altri comandi / combinazioni di tasti simili sono la stesa cosa non hanno capito molto bene quali sono le potenzialità di screen…
ad esempio nella shell ssh posso aprirmi piu sessioni virtuali e usarne una per la scrittura di un programma, una per la compilazione e un’altra per il debug, switchando dall’una all’altra senza dover continuamente avviare e chiudere i programmi che sto usando su ognuna di essi.
Se lanci un programma con nohup dopo non puoi piu riprenderne il controllo per dargli nuovi input.
Se esci con ~& quando ti ricolleghi non puoi piu vedere l’output che è stato generato mentre eri scollegato.
andrea crotti
20 ott 2007 - 21:02 - #11screen è stupendo lo uso da parecchi anni, ma non l’avevo mai utilizzato per fare ciò che suggerite in questo articolo, di certo solo una caratteristica marginale rispetto alle grandi potenzialità!
hronir
23 ott 2007 - 08:05 - #12Io non volevo fare il saputello, ho solo suggerito una possibile soluzione “a posteriori” al problema del SIGHUP (hai già lanciato il tuo script e ti chiedi come chiudere la shell senza farlo terminare…)
jimme
23 ott 2007 - 08:49 - #13infatti non dicevo a te ;)
piuttosto il #1 e #6