Блог компании 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 - это группа преданных своему делу инженеров и операторов, которые занимаются созданием и поддержкой основы наших сервисов. Каждый день мы погружаемся в мир виртуальных и выделенных серверов, занимаясь всем, от развертывания и мониторинга до устранения реальных проблем, возникающих в производственных средах. Большинство наших статей основано на практическом опыте, а не просто на теории. Мы делимся своими наблюдениями о проблемах, с которыми сталкиваемся: перебоях в производительности, ошибках в настройке, тонкостях сетевых решений и архитектурных выборах, влияющих на стабильность и надежность. Наша миссия проста - мы хотим делиться знаниями, которые позволят вам управлять своими проектами с меньшим количеством неожиданностей и гораздо большей предсказуемостью.