Как использовать screen для фоновых задач на VPS?

В этой статье разберём:

  • зачем нужен screen на VPS;
  • как установить screen на Ubuntu/Debian;
  • как создать фоновую screen-сессию;
  • как посмотреть список активных сессий;
  • как подключиться к уже запущенной сессии;
  • как остановить screen-сессию, если задача больше не нужна.

Что такое screen

screen — это терминальный менеджер сессий. Он создаёт отдельную консольную сессию внутри сервера. В этой сессии можно запустить команду или скрипт, отключиться от неё, закрыть SSH, а потом снова подключиться и посмотреть, что происходит.

Без screen долгий процесс обычно зависит от текущего SSH-подключения. Если интернет пропал, ноутбук ушёл в сон или окно терминала случайно закрыли, команда может завершиться. С screen задача продолжает работать на сервере.

Примеры задач, для которых удобно использовать screen:

  • создание большого архива сайта;

  • импорт или экспорт базы данных;

  • скачивание крупных файлов;

  • долгое обновление проекта;

  • запуск фонового скрипта;

  • выполнение команды, которую нельзя прерывать при разрыве SSH.

Когда screen особенно полезен

screen стоит использовать каждый раз, когда команда может выполняться дольше нескольких минут и её нежелательно прерывать.

Например, вы запускаете архивацию сайта:

tar -czf backup.tar.gz /var/www/site

Если архив большой, команда может выполняться долго. При обычном запуске в SSH есть риск потерять процесс при обрыве соединения. Если же запустить такую задачу внутри screen, она останется работать на VPS.

Это не полноценный менеджер служб и не замена systemd. Но для разовых административных задач screen очень удобен.

Устанавливаем screen на VPS

На некоторых серверах screen уже установлен. Если команды нет, её можно поставить через пакетный менеджер.

Для Ubuntu и Debian:

sudo apt update
sudo apt install -y screen
screen --version
Установка screen на VPS

Команда screen --version покажет установленную версию. Если версия выводится без ошибки, утилита готова к работе.

Создаём фоновую screen-сессию

Сессию screen лучше называть понятно. Например, если задача связана с резервной копией, можно назвать её backup. Если это тестовая задача — demo-task.

Для примера создадим фоновую сессию, которая будет записывать текущую дату и время в файл:

screen -S demo-task -dm bash -c 'while true; do date >> /tmp/screen-demo.log; sleep 5; done'

Разберём команду:

  • screen — запуск утилиты;

  • -S demo-task — имя сессии;

  • -d — запустить сессию в отключённом режиме;

  • -m — создать новую сессию;

  • bash -c — выполнить команду через Bash;

  • date >> /tmp/screen-demo.log — записывать время в лог;

  • sleep 5 — делать паузу 5 секунд между записями.

Создание фоновой screen-сессии на VPS

Это безопасный демонстрационный пример. Он не меняет системные настройки и нужен только для проверки работы screen.

Смотрим список screen-сессий

Чтобы посмотреть активные screen-сессии, используйте:

screen -ls

Если сессия запущена, в списке будет строка с её именем, например:

demo-task
Список screen-сессий на VPS

Если активных сессий нет, screen сообщит, что сокетов не найдено. Это нормальный вывод, когда ничего не запущено.

Проверяем, что фоновая задача работает

В нашем примере задача записывает дату и время в файл /tmp/screen-demo.log. Проверим последние строки:

tail -n 10 /tmp/screen-demo.log
Проверка работы фоновой задачи screen

Если в файле появляются новые строки со временем, значит команда продолжает выполняться в screen-сессии. Можно закрыть SSH, подключиться позже и снова проверить лог.

Как подключиться к screen-сессии

Если нужно вернуться внутрь сессии, используется команда:

screen -r demo-task

Если сессия одна, иногда достаточно:

screen -r

После подключения вы окажетесь внутри screen-сессии. Чтобы отключиться от неё, но не остановить задачу, нажмите:

Ctrl+A, затем D

То есть сначала нажимается Ctrl+A, затем отпускаются клавиши и нажимается D. После этого screen-сессия останется работать в фоне.

Важно: не нажимайте Ctrl+C, если не хотите остановить процесс внутри screen. Для выхода из сессии без остановки используется именно Ctrl+A, затем D.

Как запустить обычную команду внутри screen

Можно не создавать фоновую сессию одной длинной командой, а зайти внутрь screen вручную:

screen -S backup

После этого вы окажетесь внутри новой сессии. Там можно запустить нужную команду, например:

tar -czf site-backup.tar.gz /var/www/site

Пока команда выполняется, можно отключиться от screen-сессии через Ctrl+A, затем D. Позже можно вернуться:

screen -r backup

Такой способ удобен, когда нужно видеть вывод команды прямо в терминале.

Как остановить screen-сессию

Если задача больше не нужна, screen-сессию можно остановить. Для нашей демонстрационной сессии:

screen -S demo-task -X quit

После этого проверяем список:

screen -ls

И при желании удаляем демонстрационный лог:

rm -f /tmp/screen-demo.log
Остановка screen-сессии на VPS

Если сессии больше нет в списке, значит она остановлена.

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

Команда Что делает
screen -S name Создать новую screen-сессию с именем
screen -ls Показать список screen-сессий
screen -r name Подключиться к существующей сессии
Ctrl+A, D Отключиться от сессии, оставив её работать
screen -S name -X quit Остановить screen-сессию
screen -wipe Очистить записи о мёртвых сессиях

Чем screen отличается от nohup и systemd

Для фоновых задач в Linux есть несколько инструментов, и их не стоит путать.

  • screen удобен для ручных задач, к которым нужно вернуться позже.

  • nohup подходит для простого запуска команды без привязки к SSH-сессии, но возвращаться внутрь процесса уже не так удобно.

  • systemd лучше использовать для постоянных сервисов, которые должны запускаться автоматически и контролироваться системой.

Если нужно один раз запустить долгую команду и следить за ней — подойдёт screen. Если нужно сделать постоянную службу — лучше оформить её через systemd.

Частые ошибки при работе со screen

  • Закрыли SSH и думают, что задача остановилась

    Если задача была запущена внутри screen, она продолжит работать. Проверить можно через screen -ls или по результату самой задачи.

  • Нажали Ctrl+C вместо Ctrl+A, D

    Ctrl+C обычно останавливает текущий процесс. Для отключения от screen-сессии без остановки используется Ctrl+A, затем D.

  • Забыли имя сессии

    Посмотрите список через screen -ls. Лучше сразу давать сессиям понятные имена: backup, import, update.

  • Оставили много ненужных сессий

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

Итоги

  • Разобрались, зачем нужен screen на VPS.

  • Установили screen и проверили версию.

  • Создали фоновую screen-сессию с демонстрационной задачей.

  • Посмотрели список активных сессий через screen -ls.

  • Проверили, что задача продолжает работать в фоне.

  • Разобрали подключение, отключение и остановку screen-сессии.

Вывод: screen — простой и полезный инструмент для долгих задач на VPS. Он помогает не потерять процесс при обрыве SSH и даёт возможность вернуться к задаче позже.

Оставить комментарий