1. Блог
  2. Мануали

Screen у Linux: як запускати команди у фоні через SSH

Screen у Linux: як запускати команди у фоні через SSH

Якщо SSH-з’єднання обірветься під час тривалої операції — оновлення системи, резервного копіювання, збирання проєкту — процес завершиться разом із сесією. Утиліта screen розв’язує цю проблему: програма продовжує працювати на сервері, а ви можете від’єднатися й повернутися до неї пізніше.

Встановлення

Ubuntu і Debian:

sudo apt install screen

AlmaLinux, Rocky Linux (пакет міститься в репозиторії EPEL):

sudo dnf install epel-release
sudo dnf install screen

Основний сценарій

Створіть сесію зі зрозумілим ім’ям:

screen -S backup

Відкриється нова оболонка. Запустіть у ній потрібну команду, потім від’єднайтеся від сесії сполученням клавіш Ctrl+A, потім D. Програма продовжить роботу, а SSH-з’єднання можна закрити.

Пізніше підключіться до сервера й поверніться в сесію:

screen -r backup

Керування сесіями

screen -ls              # список сесій
screen -r backup        # повернутися в сесію
screen -d -r backup     # повернутися, навіть якщо сесію відкрито в іншому вікні
screen -S backup -X quit   # завершити сесію

Сесія також завершується, коли ви виходите з її оболонки командою exit.

Запуск команди одразу у фоні

Щоб запустити програму в окремій сесії, не відкриваючи її:

screen -dmS backup /opt/scripts/backup.sh

Сесія закриється автоматично, коли команда завершиться.

Гарячі клавіші

Усі сполучення починаються з Ctrl+A, після чого натискається друга клавіша.

Клавіші Дія
Ctrl+A, D від’єднатися від сесії
Ctrl+A, C створити нове вікно
Ctrl+A, N / P наступне / попереднє вікно
Ctrl+A, " список вікон
Ctrl+A, A перейменувати вікно
Ctrl+A, S розділити екран по горизонталі
Ctrl+A, Tab перейти в сусідню область
Ctrl+A, [ режим прокручування (вихід — Esc)
Ctrl+A, K закрити поточне вікно
Ctrl+A, ? довідка щодо клавіш

Запис виводу у файл

Ключ -L зберігає все, що виводиться в сесії, у файл screenlog.0 у поточному каталозі:

screen -L -S deploy

Це зручно, щоб після тривалої операції переглянути повідомлення, які вже вийшли за межі екрана.

Корисні налаштування

Створіть файл ~/.screenrc:

defscrollback 10000
startup_message off
hardstatus alwayslastline "%H | %w"

Перший рядок збільшує буфер прокручування, другий прибирає стартову заставку, третій показує внизу ім’я сервера та список вікон.

Часті запитання

Сесію позначено як Attached, і повернутися не вдається. З’єднання обірвалося, а сесія вважає, що ви досі підключені. Використовуйте screen -d -r ім'я.

Чи є альтернатива? Так, tmux — сучасніший аналог зі зручним розділенням екрана. screen простіший і частіше вже встановлений на сервері, тому для завдання «запустити й від’єднатися» його достатньо.

А якщо процес потрібен постійно? Для служб, що працюють постійно, використовуйте systemd або контейнери. screen розрахований на разові тривалі операції на сервері.

#screen#ssh#термінал#linux

Ця стаття іншими мовами:EnglishРусский