Ha ssh-n keresztül futtatunk valamit, amelynek várni kell az eredményére, célszerű terminál multiplexert használni.
Aszinkron futtatásra felmerülhet még lehetőségként a háttérfolyamat nohup-pal:
$ # távoli shell
$ nohup myscript.sh &>/dev/null &
$ # helyi shell
$ ssh myremote "sh -c \"nohup myscript.sh &>/dev/null &\""
Vagy az ansible, amellyel így indítható távoli job helyi gépről, egyszerre akár több szerveren is:
$ # helyi shell
$ ansible -i hosts.ini -B 1800 -P 0 -a "myscript.sh"
A legismertebb terminál multiplexerek a GNU screen és a tmux, amellyel több munkamenetet is kezelhetünk, leválhatunk róluk (sőt az ssh-ból is kiléphetünk), majd visszatérhetünk.
# apt install tmux
A tmux egységei: session, window, pane. Nekem elég egyetlen session, egy ilyen aliast szoktam létrehozni:
alias tx='tmux new-session -A -s default'
Ez vagy létrehozza a default nevű sessiont, vagy csatlakozik hozzá. Az is megoldható, hogy automatikusan e sessionbe lépjünk be, ehhez módosítsuk a kliensen a ~/.ssh/config
fájlt:
Host example.org
RemoteCommand tmux new-session -A -s default
A ~/.tmux.conf
tartalma:
unbind C-b
set-option -g prefix C-y
bind-key C-y send-prefix
bind r source-file ~/.tmux.conf
set -g default-terminal "tmux-256color"
A tmux alapértelmezett prefixe a ctrl+b
, ami baromi kényelmetlen, ezért átállítom ctrl+y
-ra. Továbbá tenni kell azért is, hogy színes legyen az output. Emlékeztetőül a legfontosabb parancs, a detach: prefix+d
.