Č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 tipkod. - 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:
- posodobitev sistema, predvsem prehod na novo glavno različico (glej: Posodabljanje sistema z ukazoma dnf in apt),
- uvoz ali izvoz velike podatkovne baze,
- kopiranje datotek med strežniki (glej: Kopiranje datotek med strežniki: scp, rsync in sftp),
- izdelava ali obnovitev varnostne kopije.