Řekněme, že vzdáleně přistupujete k jinému systému přes SSH. Chcete spustit příkaz, jehož dokončení trvá dlouho, a poté ukončit relaci SSH, ale ponechat příkaz spuštěný, i když již nejste připojeni ke vzdálenému systému. Jak to děláš? Jak možná víte, jakmile opustíte SSH, všechny běžící úlohy budou ukončeny. Začali byste práci od začátku? Nemusíš. Zde jsem uvedl 4 způsoby, jak udržet příkaz spuštěný po odhlášení z relace ssh. Čtěte dál.
Nechte příkaz spuštěný po odhlášení z relace SSH v systému Linux
Může být mnoho způsobů, jak to udělat. Zjistil jsem však, že následující metody jsou snadné a přímočaré.
Metoda 1 – Použití obrazovky
obrazovka nástroj, celoobrazovkový správce oken s emulací terminálu VT100/ANSI, vám umožňuje bezpečně se odpojit od relace SSH bez ukončení vzdálené úlohy. Bude to užitečné pro ty, kteří pracují s více vzdálenými servery. Příkaz obrazovky je předinstalován ve většině operačních systémů Linux. Pro případ, že není nainstalován, můžete jej nainstalovat pomocí správce balíčků vaší distribuce.
Na Arch Linuxu a jeho derivátech:
$ sudo pacman -S screen
Na RHEL, CentOS a dalších systémech založených na RPM:
$ sudo yum install screen
Na Debianu, Ubuntu a dalších systémech založených na DEB:
$ sudo apt-get install screen
Na SUSE/OpenSUSE:
$ sudo zypper install screen
Po instalaci obrazovky na vzdálené systémy spusťte relaci obrazovky:
$ screen
Relace obrazovky byla nyní zahájena. Nyní spusťte jakoukoli úlohu nebo úkol, který jste chtěli provést na vzdáleném systému.
Chystám se stáhnout obrázek Ubuntu 16.04:
$ wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso
Ubuntu 16.04 ISO má velikost kolem 1,5 GB. Při běžném širokopásmovém připojení bude stahování trvat téměř hodinu. Nemusíte tak dlouho čekat. Stačí nechat proces stahování spuštěný na vzdáleném systému a opustit relaci obrazovky stisknutím „Ctrl-A“ následuje “d“ . Uvidíte výstup podobný níže.
[detached from 1365.pts-0.server]
Po odpojení od relace obrazovky se můžete odhlásit ze vzdáleného systému. Vzdálená úloha bude na serveru nadále běžet.
K relaci obrazovky se můžete kdykoli znovu připojit pomocí příkazu:
$ screen -r
Uvidíte, že proces tam stále běží.
Pokud máte více než jednu relaci obrazovky, musíte zadat ID relace obrazovky, abyste ji mohli znovu připojit. Chcete-li zobrazit počet relací obrazovky, spusťte:
$ screen -ls
Ukázkový výstup by byl:
There are screens on:There are screens on: 1382.pts-0.server (Saturday 15 July 2017 04:39:51 IST) (Detached) 1365.pts-0.server (Saturday 15 July 2017 04:38:44 IST) (Detached) 2 Sockets in /var/run/screen/S-sk.
Nyní se znovu připojte k požadované relaci obrazovky, řekněte 1382 , spustit:
$ screen -r 1382
Další podrobnosti naleznete na manuálových stránkách.
$ man screenDoporučené stažení - Zdarma Cheat Sheet:"Linux Command Line Cheat Sheet"
Metoda 2 – Použití tmux
tmux je terminálový multiplexer, který umožňuje vytvořit řadu terminálů, přistupovat k nim a ovládat je z jediné obrazovky. Relaci tmux lze odpojit od obrazovky a pokračovat v běhu na pozadí a později ji znovu připojit. Stejně jako nástroj Screen můžete také použít tmux k odpojení od relace SSH bez ukončení vzdálených úloh. Příkaz Tmux je předinstalován na většině operačních systémů Linux. Pro případ, že není nainstalován, můžete jej nainstalovat pomocí správce balíčků vaší distribuce.
Na Arch Linuxu a jeho derivátech:
$ sudo pacman -S tmux
Na RHEL, CentOS a dalších systémech založených na RPM:
$ sudo yum install tmux
Na Debianu, Ubuntu a dalších systémech založených na DEB:
$ sudo apt-get install tmux
Na SUSE/OpenSUSE:
$ sudo zypper install tmux
Po instalaci tmux spusťte relaci tmux pomocí příkazu:
$ tmux
Nyní začněte svůj úkol nebo práci. Poté se bezpečně odpojte od relace tmux, aniž byste opustili vzdálené úlohy stisknutím "CTRL-b" následuje "d" . Tím se odpojí vaše relace tmux, ale vaše práce v této relaci zůstane spuštěna na pozadí. To znamená, že všechny dálkové ovladače budou spuštěny, i když budete odpojeni od relace.
Chcete-li zobrazit seznam dostupných relací, spusťte:
$ tmux ls 0: 1 windows (created Sat Jul 15 16:51:35 2017) [134x33] 1: 1 windows (created Sat Jul 15 16:53:58 2017) [134x33]
K relaci tmux se můžete znovu připojit pomocí příslušného ID relace, jak je uvedeno níže:
$ tmux attach -t 0
Další podrobnosti naleznete na manuálových stránkách.
$ man tmux
Metoda 3 – Použití Reptyru
Co když jste na prvním místě zapomněli spustit příkazy v screen/tmux? Bez obav. Zde je Reptyr přichází na pomoc. Reptyr vám pomáhá přesouvat běžící procesy mezi ptys. O Reptyru jsme již publikovali podrobného průvodce. Podívejte se na následující odkaz.
- Reptyr – přesunutí běžícího procesu z jednoho terminálu do druhého bez jeho uzavření
Metoda 4 – Použití nohup
nohup , znamená Ne h angup , je další nástroj příkazového řádku, který vám pomůže spouštět příkazy Linuxu i poté, co jste odpojeni od relací SSH. Protože je součástí GNU coreutils, nemusíte jej instalovat. Dodává se předinstalovaný ve všech distribucích Linuxu.
Použití je naprosto snadné. Po přihlášení do vzdáleného systému vše, co musíte udělat, je:
$ nohup <command> &
Ano, je to tak jednoduché.
Příklad:
$ nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &
Nyní můžete ukončit relaci SSH. Vzdálená úloha bude pokračovat.
Přihlaste se ke vzdálenému systému a spusťte následující pro zobrazení seznamu běžících úloh.
$ jobs -l [1]+ 1421 Running nohup wget http://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &
Ve výchozím nastavení budou výstupy připojeny k 'nohup.out'. Výstupní soubor můžete samozřejmě změnit.
Zde je další příklad.
$ nohup find -size +10M > log.txt &
Výše uvedený příkaz najde soubory o velikosti větší než 10M a zapíše výstup do souboru log.txt.
Další podrobnosti naleznete na manuálových stránkách.
$ man nohup
A to je zatím vše lidi. Máte něco na mysli? Neváhejte a dejte mi vědět v sekci komentářů níže. Přijdou další dobré věci. Pokračujte v návštěvě!
Na zdraví!