Odpalasz na serwerze coś, co ma mielić przez kilka godzin. Import bazy, kompilację, bota na Discorda, cokolwiek. Zamykasz laptopa, idziesz zrobić kawę. Wracasz.

Nie ma.

Proces był przypięty do Twojej sesji SSH, więc kiedy sesja się zakończyła, pociągnęła go za sobą w niebyt. I nie ma tu znaczenia, że wyglądał, jakby “chodził w tle”. Na szczęście od dawna istnieją na to dwa sprawdzone lekarstwa: screen i tmux. Oba dają Ci terminal, który żyje sobie na serwerze niezależnie od tego, czy akurat jesteś podłączony.

Który wybrać? Robią w gruncie rzeczy to samo. screen jest starszy i prostszy, tmux nowszy i wygodniejszy, potrafi na przykład pokroić ekran na kilka paneli. Ja osobiście skłaniam się ku tmuxowi, ale to kwestia gustu. Oba działają tak samo na Mikrusie i na każdym innym serwerze z Ubuntu czy Debianem.

Instalacja#

sudo apt update
sudo apt install screen tmux

Nic nie stoi na przeszkodzie, żeby wziąć oba i przekonać się, który lepiej leży w dłoni.

Screen#

Zakładamy sesję o nazwie moja-sesja. Nazwa przydaje się, gdy sesji robi się kilka i trzeba je jakoś odróżnić:

screen -S moja-sesja

W środku pracujesz jak zawsze. Odpal na przykład coś długo działającego:

python3 -m http.server 8000

Teraz najważniejsze: odłączasz się, a proces zostaje. Skrót to Ctrl+A, puszczasz, a potem samo D. Nie wszystko naraz, bo nie zadziała.

Lista sesji:

screen -ls

Powrót do sesji:

screen -r moja-sesja

Zamknięcie sesji na dobre, razem z tym, co w niej chodzi, bez wchodzenia do środka:

screen -S moja-sesja -X quit

Tmux#

Idea identyczna, tylko składnia po swojemu. Nowa sesja z nazwą:

tmux new -s moja-sesja

Odłączenie: Ctrl+B, potem D.

Lista sesji:

tmux ls

Powrót:

tmux attach -t moja-sesja

Zamknięcie z zewnątrz:

tmux kill-session -t moja-sesja

Jak widać, nic skomplikowanego. Po tygodniu te skróty wchodzą w palce.

Najczęstsze błędy#

There is no screen to be resumed po screen -r. Sesji już nie ma. Najczęściej proces w środku się zakończył, a screen zamknął się razem z nim. screen -ls powie Ci, co faktycznie zostało.

Ctrl+A w screenie zachowuje się dziwnie. Tak ma być, bo screen zagarnia Ctrl+A dla siebie. Jeśli w Bashu używasz tego skrótu, żeby skoczyć na początek linii, w screenie naciśnij Ctrl+A, a potem samo A - wtedy skrót trafi do programu w środku.

Zapomniane sesje wiszą na serwerze latami. Same się nie zamkną, dopóki coś w nich działa albo dopóki ich nie ubijesz. Warto od czasu do czasu zerknąć w screen -ls czy tmux ls i zrobić porządek.

Dwie sesje o tej samej nazwie. screen -S nazwa, gdy sesja o tej nazwie już istnieje, wcale nie wróci do starej. Otworzy obok nową i będziesz mieć dwie bliźniaczki. Do powrotu służy screen -r.