Na GNU Screen jsem narazil náhodou. Hledal jsem, zda existuje nějaký elegantní způsob, jak v linuxové konzoli zakonzervovat interaktivně běžící proces, neshodit si ho při odpojení vzdálené ssh relace a mít možnost s ním později dál interaktivně komunikovat. Docela mě překvapilo, že řešení existuje, že je elegantní a že jsem o něm nevěděl tak dlouho.
První dojmy
Chcete-li interaktivní process spustit tak aby bylo možné se k němu později vrátit, spousťte si nejprve screen (musíte mít nainstalováno, v debianu a spol. zkuste apt-get install screen)
hugo@apps:~$ screen
Program trošku mate tělem, protože zobrazí licenci, a vyzve ke stisku Enteru. Poté se objeví prompt a … nic. Nenechte se zmást, jste právě v shellu, spuštěném pod GNU Screen. Pro efekt doporučuji v tomto shellu spustit něco, co průběžně cokoli vypisuje na obrazovku. Pokud vás hned nic nenapadne zkuste třeba:
for (( ;; )); do date; sleep 1; done
Kouzlo
S trochou fantazie si představte, že je to program, který se vás pravděpodobně zhruba za 40min bude na něco ptát, ale vy byste potřebovali využít čas na přesun domů. Tady má GNU Screen pro mě největší kouzlo. Stiskem Ctrl-a d se odpojíte od sezení zatímco program dál pracuje.
Později se do sezení připojíte spuštěním
hugo@apps:~$ screen -r
příkaz otevře konzoli, tam kde jste ji před časem opustili. Program mezi tím vypisoval, případně čeká na vaši akci.
Není to kouzelné?
Ovládání
Prostředí GNU Screen se ovládá klávesovými zkratkami. Jejich seznam zobrazíte stiskem Ctrl-a ? GNU screen má velkou množinu funkcí, které nabývají na důležitosti při použití na konzoli bez okenního prostředí. Jde především o možnost vytvářet a pokročile spravovat okna včetně copy/paste mezi nimi.
Mezi nejdůležitější/základní funkce patří
- Ctrl-a ?
vypíše seznam klávesových zkratek - Ctrl-a d
odpojí od screen - Ctrl-a c
vytvoří nové okno - Ctrl-a w
vypíše seznam existujících oken - Ctrl-a n, Ctrl-a p
přepne do následujícího, předchozího okna - Ctrl-a S
rozdělí okno horizontálně - Ctrl-a |
rozdělí okno vertikálně - Ctrl-a <TAB>
přepne focus do následujícího okna - Ctrl-a \
ukončí všechna okna a screen
Letmý pohled na zajímavé přepínače programu screen
- -ls
vypíše aktivní screen sezení - -r <pid>
připojí se k screen sezení. Pokud je sezení víc, je nutné identifikovat sezení uvedením PIDu - -R
připojí se k nejmladšímu existujícímu sezení, pokud žádné neexistuje, vytvoří nové
Závěrem
Věřím, že GNU Screen Vám doplnil mozaiku znalostí , stejně jako mě před časem, o zajímavý nástroj, který se bude při správě linuxových serverů hodit. Jakékoli připomínky jsou vítany