Администрирование сервера часто требует выполнения длительных операций: компиляции программ, обработки данных, запуска ботов или игровых серверов. Если вы работаете с хостингом через SSH-сессию, разрыв соединения приведет к завершению всех запущенных процессов. Это может остановить критически важную задачу и привести к потере данных.
Решением этой проблемы является утилита GNU Screen — мощный менеджер терминалов, который позволяет создавать виртуальные сессии, продолжающие работу независимо от вашего подключения. Эта статья представляет собой исчерпывающее руководство по установке, настройке и эффективному использованию Screen для надежного запуска приложений в фоновом режиме на вашем Linux-сервере.
Данная информация предназначена для услуг: VPS хостинг или Облачный хостинг
Что такое GNU Screen?
GNU Screen — это программа полной сессии терминала, которая позволяет пользователю управлять несколькими виртуальными терминалами (окнами) в рамках одного физического терминала или SSH-сессии. Ключевая особенность — возможность отсоединить (detach) сессию Screen, оставив все процессы внутри нее работать, и позже присоединить (attach) ее обратно с любого другого терминала. Это делает Screen незаменимым инструментом для системных администраторов и разработчиков.
Преимущества использования Screen:
-
Независимость от SSH-сессии: Процессы продолжают работать после разрыва соединения или закрытия терминала.
-
Многозадачность: Возможность иметь несколько "рабочих столов" в одной сессии.
-
Фоновый режим: Запуск приложений, которые не имеют встроенной поддержки фонового режима (демона).
-
Совместная работа: Несколько пользователей могут одновременно присоединиться к одной сессии Screen (режим многопользовательского доступа).
-
Сохранение состояния: После присоединения сессия восстанавливается в точности в том состоянии, в котором вы ее оставили.
Установка GNU Screen
Перед началом работы необходимо убедиться, что Screen установлен на вашем сервере. Большинство дистрибутивов Linux поставляются с предустановленным Screen, но если его нет, установка выполняется одной командой.
Для дистрибутивов на основе Debian/Ubuntu:sudo apt update
sudo apt install screen
Для дистрибутивов на основе CentOS/RHEL/Fedora:# CentOS/RHEL
sudo yum install screen
# или для более новых версий
sudo dnf install screen
# Fedora
sudo dnf install screen
Проверка установки:screen --version
В ответ вы должны увидеть информацию о версии программы, например: Screen version 4.09.00 (GNU) 30-Oct-22.
Основы работы с Screen: Первая сессия
Работа со Screen строится вокруг управления сессиями. Сессия — это изолированная среда, внутри которой можно создавать окна, запускать процессы и т.д.
1. Запуск новой сессии Screen
Самый простой способ — просто ввести команду:screen
После выполнения вы увидите приветственное сообщение, которое можно пропустить, нажав Enter. Теперь вы находитесь внутри сессии Screen. Визуально ничего не изменится, но в верхней части терминала (или в статусной строке) может отображаться индикатор.
Совет: Сразу же давайте сессиям понятные имена. Это крайне важно, когда у вас запущено несколько сессий.screen -S my_background_session
Здесь -S (Session name) позволяет задать имя сессии my_background_session.
2. Запуск приложения внутри Screen
Теперь, находясь внутри сессии, вы можете запустить любое долгоиграющее приложение. Например, запустим простой Python-скрипт, который логирует время в файл, или серверное приложение.python3 long_running_script.py
Или:node my_app.js
Или даже интерактивную утилиту, например, top или htop.
3. Отсоединение от сессии (Detach)
Чтобы оставить сессию работать в фоне и выйти из нее, используется комбинация клавиш. По умолчанию все команды в Screen начинаются с Ctrl-a (зажать Control и нажать a), после чего следует другая клавиша.
Для отсоединения нажмите:Ctrl-a d
(Зажать Ctrl, нажать a, отпустить обе и нажать d)
После этого вы окажетесь в вашем основном терминале и увидите сообщение типа:[detached from 12345.my_background_session]
Это подтверждение, что сессия была отсоединена и продолжает работу в фоне. Ваш long_running_script.py или node my_app.js продолжает выполняться.
4. Просмотр списка активных сессий
Чтобы увидеть, какие сессии сейчас запущены, используйте команду:screen -listВывод будет выглядеть примерно так:There is a screen on:
12345.my_background_session (10/12/2023 04:20:00 PM) (Detached)
67890.another_session (10/12/2023 04:25:00 PM) (Detached)
2 Sockets in /run/screen/S-username.
Здесь 12345 — это PID (идентификатор процесса) сессии, а my_background_session — ее имя.
5. Присоединение к сессии (Attach)
Чтобы вернуться к работающей сессии, нужно к ней присоединиться. Это можно сделать по имени или по PID.
-
По имени:
screen -r my_background_session -
По PID:
screen -r 12345 -
Если сессия всего одна, можно просто использовать:
screen -r
После выполнения команды вы окажетесь ровно в том месте, где отсоединились, и увидите весь вывод приложения, который произошел за время вашего отсутствия.
Продвинутое управление сессиями и окнами
Одна сессия Screen может содержать несколько окон. Представьте, что это вкладки в браузере.
-
Создание нового окна внутри сессии:
Ctrl-a c
(Создает новое окно с оболочкой и переключается на него). -
Переключение между окнами:
-
Следующее окно:
Ctrl-a n -
Предыдущее окно:
Ctrl-a p -
Показать список всех окон:
Ctrl-a "(двойная кавычка). Для перехода выберите окно стрелками и нажмитеEnter.
-
-
Переименование текущего окна:
Ctrl-a A(Зажать Ctrl-a, затем нажать Shift+a). Вам предложат ввести новое имя для окна. Это очень помогает в навигации. -
Закрытие (убийство) текущего окна:
Просто выйдите из оболочки в этом окне командойexitили нажмитеCtrl-d. Если в окне запущен процесс, сначала завершите его. -
Прокрутка вывода:
Режим прокрутки включается комбинациейCtrl-a [. После этого можно перемещаться стрелкамивверх/внизили клавишамиPage Up/Page Down. Для выхода из режима прокрутки нажмитеEnter. -
Мониторинг активности:
Если окно требует вашего внимания (например, в нем завершился длительный процесс и появилась новая командная строка), его номер в статусной строке будет подсвечен. Чтобы включить уведомления, можно нажатьCtrl-a M. -
Принудительное присоединение:
Иногда сессия может быть "прикреплена" другим пользователем или процессом. Еслиscreen -rвыдает ошибку "There is a screen running...", можно принудительно отобрать сессию:screen -r -d my_background_sessionИли, если нужно "отсоединить" ее откуда бы то ни было и сразу присоединиться:
screen -rd my_background_session
Практические примеры использования
Пример 1: Запуск Minecraft-сервера
-
Подключаемся к серверу по SSH.
-
Создаем именованную сессию:
screen -S minecraft -
Переходим в директорию с сервером и запускаем его:
cd /path/to/minecraft/server
java -Xmx1024M -Xms1024M -jar server.jar nogui -
Дожидаемся полной загрузки сервера. Теперь его можно оставить работать.
-
Отсоединяемся от сессии комбинацией
Ctrl-a d. -
Теперь можно безопасно выйти из SSH. Сервер продолжит работу.
-
Чтобы позже проверить логи или остановить сервер, присоединяемся обратно:
screen -r minecraft
Пример 2: Запуск долгого скрипта резервного копирования
-
Создаем сессию для бэкапа:
screen -S backup -
Запускаем скрипт:
./backup_script.sh -
Убедившись, что скрипт стартовал без ошибок, отсоединяемся (
Ctrl-a d). -
Через несколько часов проверяем прогресс, присоединившись к сессии. Если скрипт завершился, в окне будет виден результат.
Пример 3: Работа с несколькими задачами одновременно
Вы администрируете веб-сервер и вам нужно следить за логами и одновременно иметь под рукой командную строку.
-
Запускаем сессию:
screen -S admin. -
В первом окне запускаем мониторинг логов Nginx:
tail -f /var/log/nginx/access.log -
Создаем второе окно:
Ctrl-a c. -
Переименовываем его для ясности:
Ctrl-a A, вводимlogs-error. -
Запускаем мониторинг логов ошибок:
Создаем третье окно:tail -f /var/log/nginx/error.logCtrl-a c. Переименовываем его вshell. Здесь у вас будет обычная командная строка для выполнения произвольных команд. -
Теперь вы можете быстро переключаться между мониторингом access-логов (
Ctrl-a p), error-логов (Ctrl-a n) и основной оболочкой.
Настройка и конфигурация Screen
Screen можно гибко настраивать через файл ~/.screenrc. Создайте его в вашей домашней директории.
Пример простого и полезного конфигурационного файла:# ~/.screenrc
# Включить отображение статус-бара внизу экрана
caption always "%{= kw}%-w%{= BW}%n %t%{-}%+w %-= %{kG}%H %{kW} %D, %M %d, %Y %c"
# Установить буфер прокрутки в 5000 строк
defscrollback 5000
# Установить сочетание клавиш для выхода из режима прокрутки на Escape (вместо Enter)
bindkey -d -k # ^[
# Включить поддержку мыши для прокрутки и кликов в некоторых терминалах
mousetrack on
# Установить сочетание клавиш для создания нового окна на F2
bindkey -k k2 screen
# Установить сочетание клавиш для переключения на следующее окно на F3
bindkey -k k3 next
Этот конфиг добавит информативную строку состояния, увеличит историю вывода и назначит "горячие" клавиши.
Альтернативы Screen: Tmux
Хотя Screen — проверенный временем инструмент, стоит упомянуть его современную альтернативу — Tmux. Tmux предлагает более современную архитектуру, расширенные возможности скриптинга, горизонтальное и вертикальное разделение экрана (панели) и активнее развивается. Многие системные администраторы перешли на Tmux, но Screen по-прежнему остается надежным и простым в освоении выбором.
Заключение
GNU Screen — это не просто утилита, а фундаментальный инструмент для любого, кто работает с Linux-серверами. Он превращает нестабильное SSH-соединение в надежную рабочую среду, где процессы могут выполняться дни, недели и месяцы без вашего прямого контроля. Освоив базовые команды создания, отсоединения и присоединения к сессиям, вы значительно повысите эффективность и надежность своей работы с хостингом. Использование окон, прокрутки и конфигурации выведет ваш навык администрирования на новый уровень. Начните использовать Screen уже сегодня, чтобы ваши задачи выполнялись без перерывов.