Screen: deixar coses executant remotament via ssh

Última modificació: octubre de 2018

En força ocasions ens trobem que hem d'entrar a una màquina en remot via ssh i executar alguna cosa (un script, backup, etc). El problema és que si sortim de la sessió (tot i que executem en segon pla l'script o el que sigui) es tancarà el que s'estava executant. Per a poder deixar la feina "treballant" i sortir de la sessió tenim screen, el multiplexador de terminals.

Un cop instal·lat

apt-get screen

Per a llençar-lo podem fer simplement

screen

O bé obrir una nova sessió de terminal amb un programari determinat, p.e:

screen top

Per a veure les sessions obertes:

screen -list

Per a entrar a la sessió (si només hi ha una):

screen -r (el -r és de resume)

Si tenim més d'una, haurem d'indicar el PID i terminal. Si mirem la imatge anterior, per a entrar en la primera sessió fariem:

screen -r 12977.pts-0.ruc

Per a deixar (detach) la sessió (treballant) i tornar al bash original:

Ctrl + a + d

SI el que volem es sortir de la sessió screen, tancant-la:

exit

Podem obrir una sessió screen (create) a partir d'una altra sessió screen amb:

Ctrl + a + c

Llavors per a passar d'una a l'altre (next) o (previous) haurem de fer:

Ctrl + a + n o Ctrl + a + p

Si matem el procés screen poden quedar recursos ocupats amb les sessions que teníem obertes. Per a fer neteja:

screen -wipe

Finalment, pot ser una mica confús si obrim un screen amb un altre bash, ja que pot ser difícil distingir quan estem al bash original o quan estem a l'screen. Una manera seria fer un screen -list

I si ens diu "Attached" (en comptes de "Detached") vol dir que estem a dintre d'un screen. (NOTA: pot haver-hi una segona opció que és que aquest screen estigui Attached, però no a la sessió en la que estem si no que a una altre sessió de terminal que tinguem oberta; s'ha de tenir una mica de pràctica per a entendre a on estem)

Una bona solució es posar-nos un fitxer ~/.screenrc (que ens permet configurar i personalitzar coses). A mi m'agrada tenir aquest fitxer amb aquesta línia:

hardstatus alwayslastline "%{=b}%{G} Screen(s): %{b}%w %=%{kG}%C %A %D, %d %M %Y "

Això fa que es vegi a baix de tot de la pantalla informació interessant (screens que tenim oberts i a quin ens trobem, hora i data) i ens permet detectar ràpidament quan estem a un screen.

A la imatge es veu que des d'un screen hem obert un altre dedicat a executar htop.

Encara més: dividint screen

Poden dividir un screen en varis:

    • Dividir en dos: Ctrl-A Shift-S. Podem seguir dividint en tants coms volguem.
    • Per a moure'ns entre els sub-screens: Ctrl-A Tab
    • Quan anem a parar a un sub-screen que no ha estat iniciat encara, ho hem de fer amb Ctrl-A C per a crear una nova finestra en aquest sub-screen
    • Ctrl-A Shift-X per a tancar una sub-screen

Una alternativa a screen és tmux.