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

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

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

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

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

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

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