Команда screen в Ubuntu: управление сессиями и задачами

Введение

Внезапный разрыв SSH-соединения при выполнении длительных операций на удаленном сервере Ubuntu нередко приводит к аварийной остановке запущенных скриптов и потере данных. Для решения этой проблемы традиционно применяется терминальный мультиплексор screen. Данное руководство знакомит с практическими аспектами работы с утилитой: от инициализации изолированных рабочих пространств и фонового выполнения скриптов до устранения зависших сокетов и оптимизации файла конфигурации под повседневные задачи администрирования.

Развертывание пакета, запуск сессий и их ревизия

Перед началом экспериментов необходимо синхронизировать локальные индексы APT и развернуть пакет screen в системе.

Обновление репозиториев и установка screen через apt

Проконтролировать успешность инсталляции и узнать текущую сборку программы позволяет вызов screen -version. Успешный вывод свидетельствует о полной готовности инструмента к эксплуатации.

⚙️ [Ключевые флаги утилиты]

-S : Назначает сеансу произвольный идентификатор вместо автоматического цифрового имени.
-ls : Формирует отчет обо всех запущенных сессиях и их статусе подключения.
-d : Отсоединяет терминал от текущего интерфейса (Detach) и уводит его в фон.
-m : Форсирует запуск новой сессии, предотвращая вложенность в текущее окружение.
-r : Возвращает ранее отсоединенную сессию в интерактивный режим терминала (Attach).
-wipe : Сканирует и удаляет из списка недоступные или поврежденные сессионные сокеты.

Проверка установленной версии screen

С помощью команды screen -S backup_task -d -m sleep 60 можно инициализировать процесс сразу в изолированном фоне, минуя переключение интерфейса терминала. Комбинация флагов -d -m гарантирует создание автономного рабочего пространства, в котором стартует таймер sleep 60 под именем backup_task.

Создание фоновой сессии backup_task без прямого подключения

Для инспекции запущенных сеансов обратимся к screen -ls. В листинге отобразится только что созданная задача backup_task со своим PID, находящаяся в корректном открепленном состоянии (Detached).

Просмотр списка активных терминальных сессий

Запуск фоновых скриптов и отслеживание выполнения

Подготовим изолированную рабочую область и первичный лог-файл командой mkdir -p ~/screen_demo && echo '작업 준비 완료' > ~/screen_demo/task.log.

Инициализация каталога и стартового лог-файла

Запустить многошаговый сценарий в фоне без ручного переключения в сессию позволяет конструкция screen -S build_job -d -m bash -c 'for i in {1..5}; do echo "진행 단계: $i" >> ~/screen_demo/task.log; sleep 1; done'. Параметры -d -m обособляют цикл генерации логов с секундной паузой в отдельном сеансе build_job.

Запуск циклической задачи в фоновом режиме

Снова выполним ревизию процессов через screen -ls. В выводе зафиксировано параллельное выполнение двух независимых сессий — build_job и запущенной ранее backup_task, причем обе функционируют в фоне без блокировки основного шелла.

Мониторинг запущенных фоновых процессов

Чтобы удостовериться в штатном ходе скрипта, сделаем паузу в две секунды и прочитаем сформированный файл: sleep 2 && cat ~/screen_demo/task.log. Появление последовательных записей подтверждает корректную запись результатов из фонового пространства.

Контроль формирования записей в журнале

Обработка зависших процессов и зачистка неактивных сокетов

Для симуляции аварийной или ненужной задачи запустим длительный фоновый таймер командой screen -S zombie_task -d -m sleep 100.

Запуск имитационной сессии для последующего удаления

Вызов screen -ls покажет расширившийся пул из трех активных сессий в статусе Detached.

Контроль сеансов перед принудительным завершением

Корректно завершить фоновый сеанс без ручного подключения к нему можно через передачу команды управления: screen -S zombie_task -X quit. Директива -X quit мгновенно останавливает контекст zombie_task прямо из текущей консоли.

Отправка сигнала завершения сессии извне

В ситуациях, когда сессии зависают или сокеты теряют связь с реальными процессами, используется диагностическая утилита screen -wipe. Она находит «мертвые» точки подключения и исключает их из системного реестра.

Очистка недоступных и поврежденных сессионных сокетов

Финальный опрос через screen -ls демонстрирует чистоту окружения: завершенный процесс исчез, а легитимные сеансы продолжают работу без деградации.

Финальная верификация рабочего пула сессий

Тонкая настройка: буфер прокрутки и статус-бар в .screenrc

Базовое поведение утилиты кастомизируется через пользовательский профиль; создадим его заготовку командой touch ~/.screenrc.

Создание конфигурационного файла .screenrc

По умолчанию буфер терминала ограничен, из-за чего длинный вывод компиляции или логов теряется. Добавим емкость в 5000 строк с помощью директивы echo 'defscrollback 5000' >> ~/.screenrc.

Увеличение емкости буфера вывода до 5000 строк

Для удобной навигации полезно зафиксировать информационную строку в нижней части экрана с отображением номеров окон и имени сервера: echo 'caption always "%{= kw}%-w%{= wk}%n %t%{-}%+w = %H"' >> ~/.screenrc.

Добавление информационной строки состояния внизу экрана

Сверим внесенные правки вызовом tail -n 2 ~/.screenrc. Настройки буферизации и кастомный заголовок должны четко присутствовать в конце файла.

Проверка внесенных конфигурационных параметров

Освоив базовый инструментарий screen, вы сможете надежно изолировать критические процессы от сетевых сбоев и комфортно администрировать удаленные серверы Ubuntu даже при нестабильном интернет-соединении.