Как запустить долгую команду так, чтобы она доработала при обрыве связи: сессии tmux, окна, панели, прокрутка и короткая шпаргалка. И пара слов о screen.
Содержание
Когда SSH-подключение обрывается, вместе с ним завершается всё, что в нём было запущено: обновление системы, копирование файлов, перенос базы. tmux решает это просто: программы работают в сессии на самом сервере, а вы подключаетесь к ней и отключаетесь, когда хотите. Связь пропала — команда работает дальше, вы заходите снова и видите её на том же месте.
Заодно в одном окне SSH получается несколько терминалов: в одном идёт обновление, в другом открыт журнал.
Установка
В Ubuntu tmux уже установлен. В остальных системах:
sudo apt install tmux # Debian
sudo dnf install tmux # AlmaLinux
sudo pkg install tmux # FreeBSDСессия: запустить, отключиться, вернуться
tmux new -s workВнизу появится зелёная полоса — вы в сессии work. Запускайте что нужно. Чтобы отключиться и оставить всё работать, нажмите Ctrl+b, отпустите и нажмите d. Теперь терминал можно закрыть.
Вернуться:
tmux ls # какие сессии есть
tmux attach -t workЕсли сессия одна, хватит tmux attach или короче tmux a. После обрыва связи — то же самое: сессия жива, заходите по SSH и подключайтесь.
Закончить сессию — exit в последнем её окне или tmux kill-session -t work.
Клавиши
Все команды tmux начинаются с Ctrl+b: нажали, отпустили, затем нужная клавиша.
| Клавиши | Что делают |
|---|---|
| Ctrl+b d | отключиться от сессии |
| Ctrl+b c | новое окно |
| Ctrl+b n, Ctrl+b p | следующее и предыдущее окно |
| Ctrl+b 0…9 | окно по номеру |
| Ctrl+b , | переименовать окно |
| Ctrl+b % | разделить окно на две панели рядом |
| Ctrl+b " | разделить окно на две панели одна над другой |
| Ctrl+b стрелка | перейти в соседнюю панель |
| Ctrl+b z | развернуть панель на всё окно и обратно |
| Ctrl+b [ | листать историю: стрелки, PgUp и PgDn, выход — q |
| Ctrl+b x | закрыть панель |
| Ctrl+b ? | список всех клавиш |
Мышь и прокрутка
По умолчанию колесо мыши в tmux историю не листает. Включите мышь — тогда можно листать колесом, выбирать панели щелчком и менять их размер:
echo 'set -g mouse on' >> ~/.tmux.conf
tmux source-file ~/.tmux.confС включённой мышью текст для копирования выделяйте с зажатым Shift — в macOS: Option в iTerm2, Fn в «Терминале».
Если tmux ругается
no server runningилиno sessions— сессий нет: сервер перезагружался или сессию закрыли.sessions should be nested with care— вы уже внутри tmux. Откройте новое окно (Ctrl+b c) вместо новой сессии.- Сессию не видно в
tmux ls— у каждого пользователя свои сессии. Запущенную послеsudo -iищите тоже из-под root.
А screen?
screen — программа постарше, с той же идеей. Если вы к ней привыкли: screen -S work — новая сессия, Ctrl+a d — отключиться, screen -ls — список, screen -r work — вернуться. Ставится пакетом screen. В AlmaLinux его нет в основных репозиториях, только в EPEL, — там проще взять tmux.
Не нашли ответ? Напишите в поддержку — подскажем.


