Добавить в корзинуПозвонить
Найти в Дзене

screen — терминальный долгожитель, который не бросает дела при отвале SSH

Ситуация: вы зашли на сервер по SSH, запустили миграцию базы данных, которая идёт 40 минут. Закрыли ноутбук, пошли домой. Пришли утром — миграция оборвалась посередине, потому что SSH-сессия разорвалась, когда ноутбук уснул. Знакомо? screen решает эту проблему. Это терминальный мультиплексор, который держит сессию на сервере независимо от вашего подключения. Потеряли интернет? Закрыли ноутбук? Ребутнули локальную машину? Сессия на сервере продолжает жить. Базовые команды: # Создать новую сессию (имя присвоится автоматически) screen # Создать сессию с именем (рекомендую) screen -S deploy # Отключиться от сессии (процесс продолжается) # Ctrl+A, D # Посмотреть список сессий screen -ls # Подключиться к последней отключённой сессии screen -r # Подключиться к сессии с конкретным именем screen -r deploy # Убить сессию (если она зависла) screen -X -S deploy quit Вариант 1 (Запуск команды в screen и отключение): # Создать сессию, выполнить команду и отключиться screen -d -m -S backup

screen — терминальный долгожитель, который не бросает дела при отвале SSH

Ситуация: вы зашли на сервер по SSH, запустили миграцию базы данных, которая идёт 40 минут. Закрыли ноутбук, пошли домой. Пришли утром — миграция оборвалась посередине, потому что SSH-сессия разорвалась, когда ноутбук уснул. Знакомо?

screen решает эту проблему. Это терминальный мультиплексор, который держит сессию на сервере независимо от вашего подключения. Потеряли интернет? Закрыли ноутбук? Ребутнули локальную машину? Сессия на сервере продолжает жить.

Базовые команды:

# Создать новую сессию (имя присвоится автоматически)

screen

# Создать сессию с именем (рекомендую)

screen -S deploy

# Отключиться от сессии (процесс продолжается)

# Ctrl+A, D

# Посмотреть список сессий

screen -ls

# Подключиться к последней отключённой сессии

screen -r

# Подключиться к сессии с конкретным именем

screen -r deploy

# Убить сессию (если она зависла)

screen -X -S deploy quit

Вариант 1 (Запуск команды в screen и отключение):

# Создать сессию, выполнить команду и отключиться

screen -d -m -S backup bash -c "rsync -av /data/ /backup/; exec bash"

-d -m — создать сессию в фоне. exec bash — оставить шелл после выполнения команды.

Вариант 2 (Режим только для чтения):

screen -r deploy -X

Подключиться к сессии, но ничего не писать. Удобно, когда коллега уже работает, а вы хотите просто посмотреть.

Вариант 3 (Логирование всего, что происходит в сессии):

Добавьте в ~/.screenrc:

logfile /var/log/screen/screen-%S.log

logfile flush 1

deflog on

Теперь все сессии пишут лог. Если что-то пошло не так — открываете лог и смотрите, что было.

Вариант 4 (Разделение окна на области):

- Ctrl+A, S — разделить окно горизонтально

- Ctrl+A, TAB — переключиться между областями

- Ctrl+A, c — создать новое окно в текущей области

- Ctrl+A, Q — убрать все области, оставить активную

Запустили htop в одной области, tail -f лога в другой — и переключаетесь между ними.

Вариант 5 (Переключение между окнами внутри сессии):

В одной сессии можно открыть несколько окон (как вкладки в браузере):

- Ctrl+A, c — создать новое окно

- Ctrl+A, n — следующее окно

- Ctrl+A, p — предыдущее окно

- Ctrl+A, " — список всех окон (выбрать стрелками)

- Ctrl+A, 0-9 — переключиться на окно по номеру

Вариант 6 (Скроллинг и копирование):

- Ctrl+A, [ — войти в режим копирования

- Стрелки / PageUp / PageDown — перемещаться

- Space — начать выделение, Space — закончить (текст скопирован в буфер)

- Ctrl+A, ] — вставить скопированное

Что выбрать: screen или tmux?

Оба решают одну задачу. У tmux больше возможностей (панели, поддержка мыши из коробки). У screen одно преимущество: он есть почти на всех серверах по умолчанию. Если вы подключаетесь к чужим серверам или работаете в legacy-среде — screen ваш выбор.

Главный совет: привыкните создавать сессию перед любым долгим процессом. Это занимает 2 секунды, а может спасти часы работы.

Используете screen или предпочитаете tmux?

P.S. Самый частый вопрос новичков: «я нажал Ctrl+A, D, а терминал закрылся, куда всё делось?». Сессия не пропала, она ушла в фон. Вернитесь через `screen -ls` и `screen -r`.

👉🏻 Я в Telegram - https://dzen.ru/id/686102a27e39653c3429f77f

👉🏻 Я в VK - vk.com/helcode

👉🏻 Я на Boosty - boosty.to/helcode