Parancsok futtatása megszakadó SSH kapcsolat mellett: tmux és screen

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+b billentyűkombinációt, engedje fel, majd nyomja meg a d billentyű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: