Zaganjanje ukazov ob prekinjeni povezavi SSH: tmux in screen

Linux Branje: 2 min

Če se povezava SSH prekine (prenosnik zaspi, Wi-Fi se zatika ali zapreš terminal), se ustavijo tudi ukazi, zagnani v povezavi. Prekinjena posodobitev sistema, uvoz podatkovne baze ali veliko kopiranje datotek pa lahko strežnik pusti v neprijetnem, celo škodljivem stanju.

Rešitev je terminalski multiplekser, na primer tmux ali screen. Ta na strežniku poganjata sejo, ki ostane živa tudi po prekinitvi povezave in s katero se lahko pozneje (tudi z drugega računalnika) znova povežeš.

tmux

Namestitev

# AlmaLinux, Rocky Linux
sudo dnf install tmux

# Ubuntu, Debian
sudo apt install tmux

Uporaba

# Zagon nove poimenovane seje
tmux new -s frissites

V odprti seji lahko delaš enako kot v običajnem terminalu. Zaženi dolgo operacijo, nato:

  • Odklop (seja v ozadju teče naprej): pritisni kombinacijo tipk Ctrl+b, spusti, nato pritisni tipko d.
  • Nato lahko mirno zapustiš SSH. Če se povezava nepričakovano prekine, to sejo prav tako odklopi.

Ponovna povezava, tudi iz nove povezave SSH:

# Seznam tekočih sej
tmux ls

# Priklop na sejo
tmux attach -t frissites

Seja se konča, ko v njej izstopiš z ukazom exit ali jo ustaviš od zunaj:

tmux kill-session -t frissites

Uporabne bližnjice

Vsak ukaz tmux se začne s predpono Ctrl+b:

Tipka Dejanje
Ctrl+b d odklop od seje
Ctrl+b c novo okno znotraj seje
Ctrl+b n / p naslednje / prejšnje okno
Ctrl+b % razdelitev okna na dva dela drug ob drugem
Ctrl+b " razdelitev okna na dva dela drug pod drugim
Ctrl+b puščice preklop med razdeljenimi deli
Ctrl+b [ pomikanje po izpisu (izhod: q)

screen

screen je starejša ustreznica tmux, ki pa jo marsikje še uporabljajo. Od AlmaLinux in Rocky Linux 8 je na voljo v repozitoriju EPEL (v AlmaLinux 10 v preizkusu različica 5.0.1; glej: Namestitev repozitorija EPEL v AlmaLinux). Na testnih računalnikih sta bila na cloud image Ubuntu 24.04 vnaprej nameščena tmux in screen, na Debianu 12 screen, na AlmaLinux 10 pa nobeden:

# AlmaLinux, Rocky Linux
sudo dnf install epel-release
sudo dnf install screen

# Ubuntu, Debian
sudo apt install screen
# Nova poimenovana seja
screen -S frissites

# Odklop: Ctrl+a, nato d

# Seznam tekočih sej
screen -ls

# Ponovni priklop
screen -r frissites

Če je po screen -r seja še priključena (Attached), ker se stara povezava ni pravilno prekinila, jo lahko z ukazom screen -d -r frissites odklopiš in prevzameš.

nohup: en ukaz v ozadju

Če ti izpisa ukaza ni treba videti in želiš le, da se izvede tudi po prekinitvi povezave, zadošča tudi nohup:

nohup ./mentes.sh > mentes.log 2>&1 &

Ukaz teče v ozadju, njegov izpis pride v datoteko mentes.log, ki jo lahko spremljaš z ukazom tail -f mentes.log. Za interaktivne ukaze (ki postavljajo vprašanja, na primer posodobitev) nohup ni primeren; zanje uporabi tmux ali screen.

Kdaj ga uporabiti?

Priporočamo, da v seji tmux ali screen zaženeš vsako operacijo, ki traja dlje od nekaj minut ali katere prekinitev bi povzročila težave:

Nazaj: Linux – članki (76)