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 розрахований на разові тривалі операції на сервері.


