Классическая история из админской практики: запускаешь тяжелый скрипт архивации (например, backup.sh), который должен упаковать несколько терабайт критических данных на сервере. Процесс долгий, ты сидишь и смотришь в консоль. И тут на самом интересном месте моргает провайдер, отваливается локальный Wi-Fi или рвется сессия OpenSSH / Putty. Связь восстанавливается через минуту, ты заходишь на сервер — и всё прервалось.
Дескрипторы закрылись, демон SSH отправил сигнал SIGHUP (Hangup) всем дочерним процессам внутри этого терминала, и ядро Linux их послушно прибило. Архив побит, время потеряно. Чтобы этого не происходило, нужно изолировать выполнение от сессии пользователя. Использовать для этого утилиту виртуальных экранов — GNU Screen. Она переносит дескрипторы ввода-вывода в безопасную зону оперативной памяти, полностью отвязывая процесс от стабильности твоего сетевого кабеля.
Платформы и установка: Как развернуть Screen
GNU Screen — это классика Unix-систем. Он невероятно легковесен, стабилен и доступен практически на любой платформе. В современных минимальных образах ОС его часто нет из коробки, поэтому ставим руками под нужную платформу:
- Debian / Ubuntu: Основная рабочая среда. Ставится одной строкой через apt:
sudo apt update && sudo apt install screen -y - RHEL / Rocky Linux / AlmaLinux: Установка через менеджер пакетов dnf:
sudo dnf install screen -y - FreeBSD: Доступен как в портах, так и в виде готового пакета:
pkg install screen - macOS: Если нужно крутить долгие локальные скрипты, ставится через Homebrew:
brew install screen
Пошаговый разбор: Порядок запуска тяжелого бэкапа
Чтобы запустить архивацию терабайт данных, спокойно закрыть терминал и пойти спать, соблюдайте строгую последовательность действий на клавиатуре:
1. Инициализация именованной сессии
Подключаемся к серверу через Putty или OpenSSH и создаем виртуальный экран. Флаг -S задает понятное имя, чтобы не путаться в PID процессов:
screen -S prod_backup
2. Пропуск приветствия (Важный нюанс)
Утилита при первом открытии выплеснет на экран копирайты и заблокирует ввод. Набивать команды в этот момент бесполезно. Порядок простой: **нажимаем Enter или дважды бьем по Пробелу**. Экран очистится, и вы попадете в чистый шелл виртуального терминала.
3. Запуск долгой задачи
Запускаем наш скрипт архивации терабайтных массивов:
./backup.sh
4. Отключение (Detach)
Скрипт зашуршал дисками, логи упаковки побежали в консоль. Чтобы безопасно отключиться и оставить задачу жить в бэкграунде, прожимаем комбинацию горячих клавиш:
Зажимаем Ctrl + a, отпускаем, а затем нажимаем клавишу d.
Экран закроется, а в основном терминале появится системный маркер [detached from prod_backup]. Всё. Процесс изолирован в памяти ядра. Можно закрывать Putty, выключать компуктер или отправлять сервер в штатный логаут.
5. Возврат в сессию (Attach)
Спустя часы, когда нужно проверить статус архива, снова цепляемся к серверу по SSH и восстанавливаем вывод командой:
screen -r prod_backup
Вы вернетесь ровно в ту же секунду лога, в то же самое состояние консоли, как будто никуда и не уходили.
Ультимативная таблица: Все возможности, команды и горячие клавиши
Для корректной работы со Screen важно четко разделять два режима управления:
- Команды CLI: Выполняются в обычном терминале (утилиты управления сессиями). Никаких префиксов и хоткеев нажимать не нужно — это стандартный синтаксис Linux.
- Внутренние команды сессии: Выполняются только тогда, когда вы уже находитесь внутри виртуального экрана. Все они привязаны к префиксу
Ctrl + a. Сначала зажимается и отпускается этот хоткей, и только затем нажимается клавиша нужного действия (например, буква команды).
Нюанс: Поскольку Screen перехватывает комбинацию Ctrl + a, стандартная функция Bash (прыжок курсора в начало строки) внутри экрана перестанет работать. Чтобы отправить эту команду именно в шелл, нажмите префикс дважды: Ctrl + a, а затем сразу кнопку a.
| Команда в CLI / Хоткей | Режим выполнения | Что делает в системе и её инженерный смысл |
|---|---|---|
screen -S [имя] |
CLI (Внешний) | Инициализация и запуск новой изолированной сессии под конкретную задачу. |
screen -ls |
CLI (Внешний) | Вывод списка всех запущенных экранов, их ID (PID) и текущего статуса (Attached/Detached). |
screen -r [имя/PID] |
CLI (Внешний) | Восстановление подключения к существующей фоновой сессии и перехват её дескрипторов. |
screen -x [имя] |
CLI (Внешний) | Multi-attach mode (Совместный режим). Подключение к экрану без отключения других админов (второй инженер видит ваш ввод live). |
Ctrl + a, затем d |
Внутренний хоткей | Detach (Отключение). Выход из виртуального экрана в основной шелл с сохранением процессов в RAM. |
Ctrl + a, затем c |
Внутренний хоткей | Create Window. Создание новой вкладки (виртуального окна) внутри одной запущенной сессии. |
Ctrl + a, затем n / p |
Внутренний хоткей | Быстрое переключение на следующее (Next) или предыдущее (Previous) окно внутри сессии. |
Ctrl + a, затем " |
Внутренний хоткей | Window List. Вызов интерактивного списка всех открытых внутренних окон для удобной навигации. |
Ctrl + a, затем S (заглавная) |
Внутренний хоткей | Split Region. Горизонтальное разделение текущей области терминала на две независимые панели. |
Ctrl + a, затем | |
Внутренний хоткей | Split Region. Вертикальное разрезание панели (доступно в актуальных сборках). |
Ctrl + a, затем Tab |
Внутренний хоткей | Focus Region. Переключение активного фокуса ввода между разделенными панелями экрана. |
Ctrl + a, затем X (заглавная) |
Внутренний хоткей | Kill Region. Закрытие текущей панели без уничтожения запущенного внутри нее шелла. |
Ctrl + a, затем k |
Внутренний хоткей | Kill Window. Принудительное уничтожение текущего окна и жесткое завершение работающего в нем процесса. |
Ctrl + a, затем [ |
Внутренний хоткей | Copy / Scrollback Mode. Режим просмотра буфера вывода. Позволяет стрелками листать историю логов вверх. Выход — Esc. |
Фичи «для продвинутых»: Логирование и защита паролем
GNU Screen умеет в полезные скрытые приемы, которые сильно облегчают жизнь при работе с инфраструктурой:
Тотальное логирование сессии: Если прожать хоткей Ctrl + a, а затем H, Screen начнет записывать абсолютно всё, что происходит на экране (весь вывод бэкапа, ошибки, вводимые команды) в файл screenlog.0 в текущей директории. Повторное нажатие выключает запись. Незаменимо для последующего разбора полетов, если что-то пошло не так.
Блокировка экрана от чужих глаз: Если вам нужно отойти от рабочего места, а сессия на сервере открыта, жмите Ctrl + a, затем x. Screen заблокирует терминал и потребует ввести пароль вашей учетной записи Linux на сервере, чтобы продолжить работу. Процессы заблокированного экрана при этом продолжают выполняться в штатном режиме.
Где Screen бессилен
Утилита работает строго в рамках системных ограничений ядра и не защитит ваши терабайты данных в двух случаях:
- Отказ по ОЗУ (OOM-Killer): Если ваш скрипт архивации потечет по памяти или сожрет всё свободное пространство в RAM, ядро Linux вызовет внутренний механизм защиты. Ему плевать, что процесс запущен внутри Screen — OOM-Killer без разбора прибьет и сам бэкап, и сервер Screen. Настраивайте лимиты и следите за потреблением ресурсов.
- Перезагрузка / Сбой питания: Серверная часть GNU Screen живет исключительно в оперативной памяти сервера. При жестком ребуте, падении сервера или отключении питания в ДЦ данные из RAM стираются, а все сессии безвозвратно уничтожаются.
Заключение
Запуск весомых, долгих инфраструктурных задач напрямую в стандартной сессии SSH без подстраховки — это неоправданный риск. Любое микро-колебание сети на пути от вашего провайдера до дата-центра помножит выполненную работу на ноль.
Возьмите за правило: зашли на выделенный сервер для проведения бэкапов, миграций или долгого сбора логов — первым делом разворачивайте именованную сессию GNU Screen. Это базовая админская гигиена, сохраняющая время, файлы и нервы.

привет, игорь! слушай, задам вопрос крайне ламерский, если что, не суди строго. скажи пожалуйста, вот я не совсем понял: эта инструкция годится только для серверов под управлением по ssh, или же её можно применить к бытовым задачам? простой пример: ставим выкачивать нечто грандиозно громоздкое при помощи wget или curl, поставили наночь, да и спать завалились. а на утро глядь- а загрузка прервалась, судя по логу, часа в три ночи. нет, wget -c — это само собой, но если мы, допустим, выкачиваем сайт целиком, или плейлист под сотню видео при помощи yt-dlp, и поди пойми, какой из видиков докачался не полностью? или конвертация сразу кучи файлов. да мало ли чего ещё можно в пример привести. так вот, годится ли эта инструкция для бытовых задач, и если да, то как её под них адаптировать? P.S. если за такие вопросы решишь закидать кирпичами, тапками и помидорами, то я не в притензии. 🙂 😀 😉
Привет!
Инструкция подходит и для бытовых задач.
Адаптировать ничего не нужно. Единственное, комп не выключать во время процесса. В остальном все также будет.
Главное помни: если выключишь питание или уйдешь в ребут — сессия Screen умрет вместе с данными в оперативной памяти.