Ha egy SSH kapcsolat megszakad (elalszik a laptop, akadozik a wifi, vagy bezárja a terminált), a kapcsolatban elindított parancsok is leállnak. Egy félbeszakadt rendszerfrissítés, adatbázis-importálás vagy nagy fájlmásolás azonban kellemetlen, akár kárt okozó állapotban hagyhatja a szervert.
A megoldás egy terminál multiplexer, például a tmux vagy a screen. Ezek a szerveren futtatnak egy munkamenetet, amely a kapcsolat bontása után is életben marad, és amelyhez később (akár egy másik gépről is) újra csatlakozhat.
tmux
Telepítés
# AlmaLinux, Rocky Linux
sudo dnf install tmux
# Ubuntu, Debian
sudo apt install tmux
Használat
# Új, elnevezett munkamenet indítása
tmux new -s frissites
A megnyíló munkamenetben ugyanúgy dolgozhat, mint egy normál terminálban. Indítsa el a hosszú műveletet, majd:
- Leválás (a munkamenet tovább fut a háttérben): nyomja meg a
Ctrl+bbillentyűkombinációt, engedje fel, majd nyomja meg adbillentyűt. - Ezután nyugodtan kiléphet az SSH-ból. Ha a kapcsolat váratlanul megszakad, az ugyanígy leválasztja a munkamenetet.
Visszacsatlakozás, akár egy új SSH kapcsolatból:
# A futó munkamenetek listája
tmux ls
# Csatlakozás egy munkamenethez
tmux attach -t frissites
A munkamenet akkor ér véget, ha benne exit paranccsal kilép, vagy kívülről leállítja:
tmux kill-session -t frissites
Hasznos billentyűparancsok
Minden tmux parancs a Ctrl+b előtaggal kezdődik:
| Billentyű | Művelet |
|---|---|
Ctrl+b d |
leválás a munkamenetről |
Ctrl+b c |
új ablak a munkameneten belül |
Ctrl+b n / p |
következő / előző ablak |
Ctrl+b % |
ablak felosztása függőlegesen |
Ctrl+b " |
ablak felosztása vízszintesen |
Ctrl+b nyilak |
váltás a felosztott részek között |
Ctrl+b [ |
görgetés a kimenetben (kilépés: q) |
screen
A screen a tmux régebbi, de sok helyen még használt megfelelője. AlmaLinux és Rocky Linux 8-tól az EPEL tárolóban érhető el:
# AlmaLinux, Rocky Linux
sudo dnf install epel-release
sudo dnf install screen
# Ubuntu, Debian
sudo apt install screen
# Új, elnevezett munkamenet
screen -S frissites
# Leválás: Ctrl+a, majd d
# A futó munkamenetek listája
screen -ls
# Visszacsatlakozás
screen -r frissites
Ha a screen -r szerint a munkamenet még csatlakoztatva van (Attached), mert a régi kapcsolat nem bomlott le rendesen, a screen -d -r frissites paranccsal leválaszthatja és átveheti.
nohup: egyetlen parancs a háttérben
Ha nem kell látnia a parancs kimenetét, csak azt szeretné, hogy a kapcsolat bontása után is lefusson, a nohup is elegendő:
nohup ./mentes.sh > mentes.log 2>&1 &
A parancs a háttérben fut, a kimenete a mentes.log fájlba kerül, amelyet a tail -f mentes.log paranccsal követhet. Interaktív parancsokhoz (amelyek kérdéseket tesznek fel, például egy frissítés) a nohup nem alkalmas; ezekhez használjon tmux-ot vagy screen-t.
Mikor használja?
Javasoljuk, hogy minden olyan műveletet tmux vagy screen munkamenetben indítson, amely néhány percnél tovább tart, vagy amelynek félbeszakadása gondot okozna:
- rendszerfrissítés, főleg új főverzióra váltás (lásd: Rendszerfrissítés dnf és apt használatával),
- nagy adatbázis importálása vagy exportálása,
- fájlok másolása szerverek között (lásd: Fájlok másolása szerverek között: scp, rsync és sftp),
- mentés készítése vagy visszaállítása.