NOHUP i SCREEN, czyli wirtualne sesje w Linuksie
Ok, stało się – oto mój pierwszy “techniczny” artykuł. Napisaliśmy na blogu już niejednokrotnie, że uczymy się razem z wami i dzielimy zdobytą wiedzą, i jako, że zacząłem uczyć się Linuksa… przepraszam GNU Linux … …to postanowiłem uzewnętrznić się i opisać tu moje boje:)
To, o czym napiszę nie jest rzeczą super skomplikowaną – jedno polecenie, jednakże bardzo przydatne i standardowo niedostępne w dystrybucji Ubuntu (Lubuntu dokładniej), na której postawiłem serwer do nauki. A co zmotywowało mnie do nauki Linux? Wcale nie sprawy służbowe… Głupi temat – chciałem pograć z znajomymi w (wait for it….) Minecrafta 🙂
Sprawiłem sobie mały energooszczędny Nano PC od Foxconna i zarządzam nim łącząc się przez SSH. Zapewne temat stawiania serwerów opiszą moi bardziej zaawansowani technicznie koledzy. Ja skupię się problemie poniższym.
Chcę odpalić skrypt/program i po rozłączeniu z sesją SSH chciałbym, żeby program dalej się wykonywał.
Można to zrobić na dwa sposoby:
Pierwszy (gorszy wg mnie) – wykorzystując polecenie “nohup”. Oto składnia:
nohup nazwa_komendy &
I to w sumie załatwia temat, ale…
Co zrobić gdybyśmy chcieli po pewnym momencie podłączyć się przez SSH jeszcze raz i zobaczyć jak program/skrypt się wykonuje?
Ja szczerze powiedziawszy nie wiem jak to zrobić korzystając z nohup, ale wiem jak zrobić to inaczej.
Wykorzystam do tego polecenie “screen”. Polecenie screen nie jest dostępne standardowo w Ubuntu, więc musimy je doinstalować
sudo apt-get -y install screen
Screen tworzy wirtualną sesję terminalową od której możemy się rozłączyć zostawiając ją działającą w tle i potem bez problemów podłączyć, żeby normalnie na niej pracować. Robimy to tak:
(najpierw tworzymy nową sesję)
screen -S nazwa_sesji
Odpalamy coś, co musi się długo wykonywać lub działać cały czas w tle
Wciskamy kombinację „CTRL+A”.
Wciskamy klawisz „D”.
I już się rozłączyliśmy z sesją, która spokojnie działa w tle, nawet po rozłączeniu sesji ssh. Żeby się podłączyć ponownie z takim terminalem wystarczy wpisać:
(żeby przypomnieć sobie nazwę wirtualnej sesji)
screen -ls
screen -R nazwa_sesji
To wszystko:-). Proste, trywialne, a jakże użyteczne dla Nooba Linuxowego.
Zeby zobaczyc jak się wykonuje program wykonany z nohup wystarczy sobie stailować loga tail -f nohup.out
Warto też pamiętać o opcji screen -x nazwa_sesji, która umożliwia oderwanie podłączonej sesji z innego zdalnego komputera i podłączenie do tego, na którym aktualnie pracujemy.
Powyższe polecenia działają ale tylko w przypadku gdy programy wykonują się w terminalu. Co natomiast z programami ktróre wymagają środowiska graficznego (Xsów)? Jak wtedy zakończyć sesję SSH i nie przerwać działania programu a następnie się zalogować i móc zobaczyć wyniki?