В этой статье разберём:
- зачем нужен
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 --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.
Смотрим список screen-сессий
Чтобы посмотреть активные screen-сессии, используйте:
screen -ls
Если сессия запущена, в списке будет строка с её именем, например:
demo-task
Если активных сессий нет, screen сообщит, что сокетов не найдено. Это нормальный вывод, когда ничего не запущено.
Проверяем, что фоновая задача работает
В нашем примере задача записывает дату и время в файл /tmp/screen-demo.log. Проверим последние строки:
tail -n 10 /tmp/screen-demo.log
Если в файле появляются новые строки со временем, значит команда продолжает выполняться в 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
| Команда | Что делает |
|---|---|
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 и даёт возможность вернуться к задаче позже.