Блог компанії 3v-Hosting

Використання tmux для тривалих завдань на VPS

Загальне

9 хв.


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

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

Звісно, існують такі інструменти, як nohup, systemd та cron. І ці інструменти чудово підходять для автоматизації рутинних завдань. Але коли вам потрібно бачити вихідні дані програми, час від часу вводити нові команди або перемикатися між кількома завданнями, тоді набагато зручніше використовувати спеціалізовану утиліту tmux.

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

 

 

 

 

Що таке tmux

tmux - це класичний мультиплексор терміналу. Тобто він створює окрему термінальну сесію, яка продовжує працювати незалежно від SSH-з’єднання.

Уявіть собі звичайне SSH-з’єднання як телефонну розмову. Поки є зв’язок - у вас усе працює. Але щойно з’єднання обірвалося - ваша розмова закінчилася.

А ось при використанні tmux робоча сесія залишається на сервері активною, навіть якщо ви відключилися, тому можна повернутися через кілька хвилин або наступного дня, а ваш термінал залишиться в тому ж стані, в якому ви його залишили. Виходить, що SSH використовується лише для підключення до вже існуючого робочого середовища, але всі процеси продовжують виконуватися всередині tmux.

Запускати через tmux можна практично будь-які команди. Особливо він буде корисний для тих операцій, які виконуються досить довго. Прикладами таких операцій можуть бути, наприклад:

  • резервне копіювання даних;
  • оновлення операційної системи;
  • перенесення сайтів між серверами;
  • імпорт великих баз даних у MySQL або PostgreSQL;
  • синхронізація файлів через rsync;
  • розгортання Docker-додатків;
  • компіляція великих проєктів;
  • навчання невеликих моделей машинного навчання.
  • тощо.

 

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

 

 

 

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

У всіх популярних дистрибутивах Linux встановлення tmux займає всього кілька секунд, оскільки всі необхідні пакети є в репозиторіях. Нижче ми наведемо команди для встановлення на найпопулярніші дистрибутиви.

Debian та Ubuntu

sudo apt update
sudo apt install tmux

 

AlmaLinux, Rocky Linux та CentOS Stream

sudo dnf install tmux

 

Arch Linux

sudo pacman -S tmux

 

 

Перевірити встановлення можна за допомогою команди:

tmux -V

Якщо на екрані з’явилася версія програми, наприклад:

tmux 3.5a

- значить, усе готово до роботи.

 

 

 

 

Створення першої сесії

Уся робота в tmux будується навколо сесій. Саме всередині них запускаються програми, відкриваються вікна та панелі, а також продовжують виконуватися тривалі процеси після відключення від сервера.

Створити нову сесію можна однією командою:

tmux

Такий варіант підходить для швидкого запуску. Але для повсякденної роботи краще відразу давати сесіям зрозумілі імена, особливо якщо одночасно доводиться працювати з кількома проєктами.

Зробити це можна за допомогою такої команди:

tmux new -s backup

 

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

 

 

 

 

Основні команди tmux

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

Дія Команда
Створити нову сесію tmux new -s ім'я
Переглянути список сесій tmux ls
Підключитися до сесії tmux attach -t ім'я
Завершити вибрану сесію tmux kill-session -t ім'я
Завершити всі сесії tmux kill-server

Цього набору цілком вистачить для виконання більшості завдань.

 

 

 

 

Як вийти з сесії та повернутися назад

Як ми вже зрозуміли, головною особливістю tmux є можливість покинути термінал, не зупиняючи запущені процеси. Для цього натисніть таку комбінацію клавіш:

Ctrl+B, потім D

 

Після цього ви повернетеся до звичайної оболонки. Тепер ви можете закрити термінал, від’єднатися від сервера або навіть вимкнути комп’ютер, але все, що працює всередині tmux, продовжить виконуватися.

 

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

tmux ls

Ви побачите ті імена, які присвоїли сесіям під час їх створення, наприклад:

backup
deploy
monitoring

 

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

tmux attach -t backup

 

Ви побачите термінал у тому ж стані, в якому залишили його раніше, включаючи весь вивід програми, яка там виконувалася.

Саме тому tmux так цінують під час роботи з VPS. Навіть якщо інтернет несподівано зникне під час створення резервної копії, розгортання Docker-додатка або оновлення системи, процес не доведеться запускати заново. Достатньо буде знову підключитися до сервера та виконати tmux attach.

 

 

 

 

Робота з вікнами та панелями

Одна з найзручніших можливостей tmux - це можливість створення декількох робочих просторів у межах однієї сесії. Можна створювати окремі вікна, швидко перемикатися між ними та, за потреби, розділяти одне вікно на кілька панелей. Наприклад, в одному вікні можна залишити логи додатка, в іншому стежити за завантаженням сервера, а в третьому редагувати конфігурацію веб-сервера.

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

tmux-panels

 

Такий підхід швидко замінює кілька окремих SSH-підключень і робить роботу з сервером помітно зручнішою.

 

 

 

 

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

Усі комбінації клавіш у tmux починаються з так званого префікса, яким є комбінація клавіш:

Ctrl+B

Після цього натискається друга клавіша.

Дія Комбінація
Створити нове вікно Ctrl+B, потім C
Наступне вікно Ctrl+B, потім N
Попереднє вікно Ctrl+B, потім P
Розділити вікно по вертикалі Ctrl+B, потім %
Розділити вікно по горизонталі Ctrl+B, потім "
Перемкнутися між панелями Ctrl+B, потім O
Закрити поточну панель Ctrl+B, потім X
Від'єднатися від сесії Ctrl+B, потім D

Більшість користувачів щодня використовує лише кілька комбінацій, які дуже швидко запам'ятовуються, і робота з tmux стає зручною, швидкою та інтуїтивною.

 

 

 

 

Відмінність tmux від nohup

Не можна не згадати, що існує ціла низка інструментів, схожих на tmux, і серед них найчастіше згадується nohup, який часто порівнюють із tmux, хоча їхні завдання дещо відрізняються.

nohup також дозволяє процесу продовжувати роботу після закриття терміналу, і якщо потрібно просто запустити команду та забути про неї, цього цілком достатньо.

Однак tmux зберігає всю робочу сесію, до якої можна знову підключитися, переглянути вихідні дані програм, зупинити процес, змінити параметри або продовжити роботу з того самого місця.

Нижче ми спробували у простій табличній формі навести основні збіги та відмінності найпопулярніших інструментів.

Можливість tmux screen nohup
Процес продовжує працювати після відключення Так Так Так
Повторне підключення до термінала Так Так Ні
Кілька вікон Так Так Ні
Поділ вікна на панелі Так Обмежено Ні
Інтерактивна робота Так Так Ні

 

Для сучасних Linux-систем tmux давно став основним інструментом такого класу, який зарекомендував себе як стабільний і зручний продукт.

 

 

 

 

Корисні поради та типові помилки

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

Насамперед давайте сесіям зрозумілі імена, адже знайти сесію backup або production набагато простіше, ніж згадувати, що ховається за тією чи іншою безіменною сесією.

Також для кожного проєкту або сервера краще створювати окрему сесію. Так робочий простір залишається впорядкованим, а перемикатися між завданнями стає простіше.

Ну і коли робота завершена, краще видаляйте сесії, які більше не потрібні. Це допоможе підтримувати порядок і швидше знаходити активні проєкти.

Новачки найчастіше припускаються кількох однакових помилок:

  • запускають тривалі процеси поза tmux;
  • створюють велику кількість безіменних сесій;
  • випадково завершують сесію замість того, щоб від’єднатися;
  • використовують tmux kill-server, коли потрібно видалити лише одну сесію;
  • очікують, що сесії збережуться після перезавантаження сервера.

Більшість цих помилок трапляється лише один раз, але після невеликої практики робота з tmux стає звичною й майже автоматичною.

 

 

 

 

 

FAQ

 

Чи можна закрити SSH, не зупиняючи програму?

Так. Для цього достатньо від’єднатися від сесії, натиснувши Ctrl+B, а потім D. Після цього можна закрити термінал, від’єднатися від сервера або навіть вимкнути комп’ютер. Усі процеси, запущені всередині tmux, продовжать працювати.

 

Що станеться, якщо зникне інтернет або ноутбук перейде в режим сну?

Нічого критичного не станеться. SSH-з’єднання розірветься, але сама tmux-сесія продовжить працювати на сервері. Після повторного підключення достатньо виконати tmux attach, щоб продовжити роботу з того самого місця.

 

Чи можна запустити кілька tmux-сесій одночасно?

Так. Більше того, саме так найчастіше й працюють. Наприклад, одну сесію можна використовувати для резервного копіювання, іншу - для розгортання додатка, а третю - для моніторингу сервера.

 

Чи можна підключитися до однієї tmux-сесії з різних комп’ютерів?

Так. Якщо підключитися до однієї й тієї ж сесії з кількох пристроїв, скрізь відображатиметься один і той самий термінал. Це зручно, коли потрібно продовжити роботу з іншого комп’ютера або спільно адмініструвати сервер.

 

Чи збережеться сесія після перезавантаження сервера?

Ні. tmux не переживає перезавантаження операційної системи. Після запуску сервера потрібно буде створити нову сесію та, за необхідності, знову запустити потрібні процеси.

 

Чи можна використовувати tmux через PuTTY?

Так. tmux працює на стороні сервера і не залежить від SSH-клієнта. Підійдуть PuTTY, OpenSSH, Windows Terminal, MobaXterm, Termius та будь-які інші програми.

 

Чим tmux відрізняється від screen?

Обидва інструменти дозволяють запускати процеси в окремих термінальних сесіях і повертатися до них пізніше. Однак tmux пропонує зручнішу роботу з вікнами та панелями, гнучке налаштування й активно розвивається, тому сьогодні саме його частіше рекомендують для нових проєктів.

 

 

 

 

Підсумки

tmux - один із тих інструментів, який швидко стає частиною повсякденної роботи з Linux-серверами. Він дозволяє не турбуватися про випадковий розрив SSH-з’єднання, допомагає організувати робочий простір і позбавляє від необхідності повторного запуску тривалих завдань.

Якщо ви регулярно працюєте з VPS, адмініструєте сервери, розгортаєте Docker-додатки, переносите дані або просто виконуєте команди, які працюють годинами, tmux варто освоїти в першу чергу. На вивчення базових можливостей піде зовсім небагато часу, а користуватися ними ви, швидше за все, будете щодня.

3v-Hosting Team

Автор

3v-Hosting Team

Команда 3v-Hosting складається з групи відданих своїй справі інженерів та операторів, які повністю присвятили себе створенню та підтримці основи наших сервісів. Щодня ми занурюємося у світ віртуальних та виділених серверів, займаючись усім, від розгортання та моніторингу до усунення реальних проблем, що виникають у виробничих середовищах. Більшість наших статей ґрунтуються на практичному досвіді, а не лише на теорії. Ми ділимося своїми думками щодо викликів, з якими стикаємося: перебоїв у роботі, помилок у налаштуваннях, складнощів мережевої взаємодії та архітектурних рішень, що впливають на стабільність і надійність. Наша місія проста - ми хочемо ділитися знаннями, які допоможуть вам керувати своїми проектами з меншою кількістю несподіванок та набагато більшою передбачуваністю.