Перейти к содержимому

tmux: работа не прерывается при обрыве SSH

Как запустить долгую команду так, чтобы она доработала при обрыве связи: сессии 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.

Не нашли ответ? Напишите в поддержку — подскажем.