Programmi sempre in esecuzione con GNU screen

pubblicato: sabato 20 ottobre 2007 da Andrea de Palo in: Software Tips Shell

TerminaleSe 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.

PUBBLICITÀ

I comandi per avviarlo sono molto semplici

  • screen avvia screen e ci restituisce la nostra shell: possiamo lavorare come se nulla fosse.
  • screen foo avvia il programma foo all’interno di screen, come avviene di solito con la shell.
  • premendo ctrl+a e poi c all’interno di una sessione di screen andremo a creare un nuovo terminale.
  • premendo ctrl+a e poi n passeremo al terminale successivo.
  • premendo ctrl+a e poi p passeremo al terminale precedente.
  • premendo ctrl+a e poi d “sganceremo” screen dalla nostra sessione corrente, mantenendo in esecuzione i comandi da noi lanciati. Possiamo terminare anche la nostra sessione ssh con la certezza che i nostri processi non vengano interrotti.
  • screen -r recupera una sessione precedentemente “sganciata”.

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?

1 stelle2 stelle3 stelle4 stelle5 stelle (1 Voti | Media: 5 su 5)
condividi condividi condividi 13 commenti
PUBBLICITÀ

Commenti dei lettori

(Inserisci un commento - Nascondi commenti anonimi)
  • Commento #1 (-5 punti) - 20 ott 2007 - 09:48 - Apri commento
  • JJJJJJJ

    20 ott 2007 - 09:48 - #1 (nascondi)
    -5 punti
    Up Down

    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 - #2
    -3 punti
    Up Down

    Correggo la definizione di carattere di escape non e’: ~^& ma solo ~& ciao

  • Profilo di depaloan

    depaloan

    20 ott 2007 - 09:57 - #3
    2 punti
    Up Down

    Ti assicuro che con screen è tutto molto più comodo…

  • kionez

    20 ott 2007 - 10:16 - #4
    3 punti
    Up Down

    beh.. 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 - #5
    0 punti
    Up Down

    Io 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 - #6
    -1 punto
    Up Down

    ottimo! sempre in tema di ovvieta’ perche’ non ci spieghi come usare il comando ls?

  • ^-Super_Treje-^

    20 ott 2007 - 10:36 - #7
    -1 punto
    Up Down

    Personalmente 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 - #8
    3 punti
    Up Down

    Eh 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.

  • Profilo di Muzero

    Muzero

    20 ott 2007 - 12:04 - #9
    -4 punti
    Up Down

    Ha ragione super treje, basta il comando nohup per avere lo stesso effetto.

    Esempio:

    $ nohup sh mioscript.sh

    e possiamo chiudere la shell senza problemi :)

  • Profilo di jimme

    jimme

    20 ott 2007 - 14:37 - #10
    4 punti
    Up Down

    Quanta 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 - #11
    2 punti
    Up Down

    screen è 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 - #12
    1 punto
    Up Down

    Io 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…)

  • Profilo di jimme

    jimme

    23 ott 2007 - 08:49 - #13
    1 punto
    Up Down

    infatti non dicevo a te ;)
    piuttosto il #1 e #6

PUBBLICITÀ
L'email è richiesta ma non verrà mostrata ai visitatori.
Commenta questo articolo

Registrati per riservare il tuo nickname preferito su tutti i blog di Blogo e per caricare il tuo avatar. Se sei già registrato, effettua il login per usare il tuo nickname.

Si No
I commenti sono sottoposti alle linee guida per la moderazione.

Anteprima del commento

Network Blogo