Czasem zachodzi sytuacja, gdy np. musimy wykonać jakiś czasochłonny proces na serwerze i musimy pilnie wyjść z pracy / domu. Albo po prostu jest już 2 w nocy 😉
Możemy zrobić to poprzez konsolę uruchamiając proces w tle na np. odległym serwerze i wylogowywując się z tego serwera. Łącznie z wyłączeniem naszego komputera!
Co to mogą być za zadania do wykonania?
- Pobieranie (lub szczególnie wysyłanie) dużej ilości plików przez FTP
- Wywołanie długo trwałego zapytania MySQL
- Pobieranie torrentów – oczywiście legalnych ISO dystrybucji Linux 😉
- Długotrwały commit / checkout w SVN (czytaj nasze artykuły poświęcone SVN)
itp.
Aby uruchomić tak proces – skorzystamy z programu screen
Zawartość artykułu
Uruchamianie nowej sesji screen
Sesji może być tyle ile zapragniemy. Każdą nową sesję uruchamiamy poprzez:
1 |
screen -S {nasza-dowolna-nazwa} |
Czyli np. jak wysyłamy pliki na serwer w home.pl nazwijmy taką sesję:
1 |
screen -S homewysylanie |
(wielkość liter ma znaczenie)
Wtedy otworzy nam się „nowa” konsola gdzie możemy normalnie w świecie wywoływać programy. Aby rozpocząć wysyłanie FTP – mozemy tutaj użyć programu Midnight Commander – czytaj jak użyć go do obsługi FTP
Bezpieczne wylogowanie się z sesji screen
Tutaj jest klucz naszych rozważań. Jak już uruchomimy proces który musi trwać – musimy jakoś „zamknąć” sesję o naszej nazwie (tutaj: homewysylanie). W tym celu wykonujemy komibnację klawiszy:
1 2 |
CTRL+A CTRL+D |
Gotowe, sesja zamknięta.
Wznowienie sesji screen
Aby ją wznowić – musimy znać identyfikator konkretnej sesji (bo, jak zaznaczaliśmy – może być ich dowolna liczba). W tym celu listujemy aktualne sesje:
1 |
screen -ls |
Następnie wybieramy sesję, którą chcemy wznowić poprzez podanie jej identyfikatora (oczywiście u Ciebie będzie on inny – jedynie label sesji screen – czyli nazwa homewysylanie pozostanie ta sama jeśli takiej użyjesz):
1 |
screen -r 6578.homewysylanie |
To wszystko – sesja screen którą wówczas pozostawiliśmy – wznowiona:)
Usuwanie wszystkich sesji screen
W tym celu pomocna będzie komenda killall:
1 |
killall screen |
Użycie komendy killall opisaliśmy tutaj.