Сервер в кармане, или просто о сложном!

главная - Статьи - Linux, FreeBSD

Утилита Screen

Дата обновления: 24.04.2020

Теги: Linux

Утилита Screen создает отдельные сессии, в рамках которых можно выполнять команды, работать. И при желании переключаться между этими сессиями, как между окнами графического интерфейса. Это не замена работе в терминальных сессиях на одном сервере нескольких пользователей, а отдельный инструмент. Больше всего это похоже на работу по RDP. У вас может быть открыто несколько rdp-сессий. Если коннект нарушится, вы потом просто переподключаетесь и продолжаете работать. Аналогично, если кто-то подключится к вашей сессии rdp, вас отключит, а работу продолжит уже другой человек.

Установка в CentOS 7:

# yum install screen

Для установки screen в CentOS 8 нужен установленный репозиторий EPEL, после чего все будет ок:

# dnf install screen

Самое простое - запустить screen без параметров:

# screen

После чего все запускаемые команды будут выполняться в этом "экране" (примерно как запуск программы в новом окне).

Если свернуть текущий screen (CTRL+a, потом d), выполняющиеся в нем команды не прервут своего исполнения, и к этому "экрану" можно будет потом вернуться:

# screen -r

А можно сразу запустить программу в screen:

# screen -S pingscreen ping 8.8.8.8

При этом вы окажетесь в сессии с именем "pingscreen".

 

Полезные команды screen

Свернуть текущий screen:
нажать CTRL+a, затем d (обратите внимание, когда нажмете CTRL+a, ничего не изменится визуально, не будет уведомлений типа "а сейчас нажмите d чтобы свернуть screen"). 

Нажатие CTRL+C, широко используемое для прерывания текущей команды, в screen завершит работу текущего screen!

Собственное имя screen

# screen -S screenname

Задать свое название создаваемому screen, например, если если screen создается для проверки доступности чего-то:

# screen -S ping

Запустили ping, свернули screen, смотрим список скринов:

# screen -list
There are screens on:
        23604.ping    (Detached)
        23560.pts-2.centos      (Detached)
        9993.pts-0.centos       (Detached)
3 Sockets in /run/screen/S-root.

Отобразить список screen'ов

screen -list
screen -ls

Вернуться к свернутому screen

# screen -r

Если screen'ов несколько: "-r screenname", где screenname из примера выше может быть заданное имя "ping" или автоимена "pts-2.centos" и "pts-0.centos".

Detach screen

-d - не запускает screen, а отключает остальные сессии:
-dr - Отключиться, если возможно (detach), и подключиться к конкретной сессии.
-dm - Запустить сессию в режиме deattached режиме, полезно при запуске скриптов.

Зачем нужен detach? Если сессия сейчас активна (Attached), то session не даст с ключом -r подключиться к ней. А если форсировать detach, то сразу после этого можно подключиться к сессии.

Например:

> screen -dm -S pingscreen2 ping 8.8.8.8

создаст screen с именем pingscreen2, но не будет к нему подключаться, а даст ему статус detached и просто начнет его выполнение в фоне, в то время как вы продолжите работу. Это может быть удобно при запуске скриптов. Во-первых, выполнение скрипта не будет вам мешать. Во-вторых, если ваша терминальная сессия вдруг разорвется (чаще по ssh ралотаем же), то выполнение крипта не прервется.


Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?