Как получить доступ к сеансу tmux после его завершения?

Вопрос или проблема

Я использую tmux на EC2 AWS, но хочу увидеть, что происходит в одной из созданных мной сессий.

Я использую Ctrl+b, а затем d, чтобы выйти из сессии.

Я хочу увидеть, что происходит в одной из созданных мной сессий.

Насколько я знаю, вы можете просмотреть список ваших сессий tmux, используя

tmux list-sessions, чтобы увидеть, какие сессии в данный момент запущены в tmux.

Чтобы фактически увидеть, что выполняется в этих сессиях, вы должны присоединиться к конкретной сессии, для этого у вас есть два варианта (из опыта).

  1. Если вы в данный момент не запустили сессию tmux (или не находитесь в сессии tmux), вы присоединяетесь, запустив tmux attach -t n (где -t обозначает целевую сессию, а n — номер этой сессии).

  2. Если вы запустили другую сессию tmux, вы получите ошибку при попытке подключиться к другой сессии, поэтому самый простой способ увидеть, что там выполняется, — это использовать команду tmux list-windows -a, а затем переместить любую панель/окно, в котором выполняется задача.

Перемещение окна

Используя tmux move-window -s n1 -t n2 (-s == исходное окно, -t == целевое окно, куда вы перемещаете исходное окно. n1 == номер окна, которое вы хотите переместить, и n2 — номер целевого окна).

Формат

Числа n1 и n2 упорядочены/отформатированы как sessionNumb:windowNumb.
Таким образом, первая сессия в первом окне будет 0:1, а вторая сессия в первом окне будет 1:1.

Примечание: n2 должен быть доступной сессией с ещё не созданным окном. Если вы перемещаете окно в уже созданное окно, вы получите ошибку «Целевое окно не пусто», и при перемещении в не созданную сессию получите ошибку “нельзя найти сессию n”.

Перемещение панели

Иногда в одном окне может быть много панелей, и вам нужно переместить только одну панель, это полезно, если вам нужно переместить только эту панель в текущее окно (так как вы не можете переместить окно в другое окно).

Вы используете почти такую же синтаксическую структуру, как при перемещении окна, но вы используете tmux move-pane -s *n1* -t *n2*.

Где n1 теперь отформатировано как sessionNumb:windowNumb.paneNumb, и так же, как n2.

Примеры

После tmux list-windows -a вы получите что-то вроде этого

0:1: Project- (4 panes) [177x48]
0:2: Mirror (3 panes) [177x48]
0:3: Chat! (1 panes) [177x48]
0:4: ssh* (1 panes) [177x48]
1:1: zsh (2 panes) [176x45]
1:2: zsh* (1 panes) [176x45]
1:3: zsh- (1 panes) [176x45]

Теперь, чтобы переместить окно “Chat” из первой сессии во вторую сессию, мне нужно будет запустить tmux move-window -s 0:3 -t 1:4 (помните, что нельзя переместить окно в уже созданное окно).

Перемещение панели

Если вам нужно переместить только одну панель, то вам нужно выполнить tmux list-panes -a, или если вы уже знаете, из какого окна она, вы можете использовать tmux list-panes -t 0:1 См. объяснение формата выше.

Результат показывает, что сессия 0 окно 1 (-s 0:1) имеет такие панели.

1: [177x34] [history 3/10000, 4119 bytes] %7 (active)
2: [88x13] [history 541/10000, 231972 bytes] %8
3: [88x13] [history 2/10000, 1541 bytes] %9

что просто неприемлемо, но если вам нужно больше информации, чтобы понять, какая панель вам действительно нужна, вы можете выполнить

tmux list-panes -F "#{pane_current_command}" -t 0:1

Что отобразит текущие команды, выполняемые на каждой панели.

В моем случае

vim
zsh
python (к сожалению, запускается `ranger`)

Итак, после идентификации нужной панели (скажем, той, где vim) вам нужно ее переместить.

tmux move-pane -s 0:1.1 -t 1:1.2 для перемещения в конкретную панель в данном случае 2

Если в целевом окне есть только одна панель, вы можете использовать tmux move-pane -s 0:1.1 -t 1:1. без указания целевой панели, и это всё равно сработает.

Следуя ответу выше, вы можете попробовать:

tmux ls, чтобы получить номер сессии. А затем

tmux attach-session -t <номер_сессии>

Если у вас есть единственная сессия tmux, используйте:

tmux a

чтобы получить к ней доступ

Если вы хотите привязать это к клавише в вашей оболочке (чтобы сделать возврат в tmux из другого терминала максимально простым), вы могли бы сделать что-то подобное. Это для zsh.

Я полагаю, только формы function и bindkey немного изменятся для других оболочек.

В моем ~/.zshrc:

function tmux_last_session(){

    LAST_TMUX_SESSION=$(tmux list-sessions | awk -F ":" '{print$1}' | tail -n1);
    tmux attach -t $LAST_TMUX_SESSION
}
bindkey -s '^s' 'tmux_last_session ^M'

Активируйте это. source ~/.zshrc

Ctrl+s теперь открывает последнюю отсоединенную сессию tmux.

Обычно выбор из списка привязан к prefix s, поэтому если ваш префикс — C-b, тогда C-b s

.

Ответ или решение

Когда вы работаете на AWS EC2 и используете tmux, вы можете столкнуться с ситуацией, когда вам нужно повторно подключиться к ранее созданной сессии, чтобы просмотреть выполняющийся в ней процесс. Давайте рассмотрим, как это сделать эффективно и профессионально, учитывая все ключевые аспекты работы с tmux.

Теория

tmux — это терминальный мультиплексор, который позволяет управлять несколькими терминальными сессиями из одного окна терминала. Это особенно полезно при работе с удалёнными серверами, где важно поддерживать активное состояние терминалов даже после отключения клиента.

Когда вы запускаете tmux-сессию, она работает в фоновом режиме. Вы можете отключаться от этой сессии, не влияя на её работу, и подключаться к ней повторно, чтобы продолжить работу с того момента, на котором вы её оставили. Это достигается с помощью команд, которые позволяют управлять сессиями, окнами и панелями внутри tmux.

Пример

  1. Список сессий: Для просмотра всех активных tmux-сессий используйте команду:

    tmux list-sessions

    Это выдаёт список всех запущенных сессий с уникальными идентификаторами, которые могут быть использованы для подключения к нужной сессии.

  2. Подключение к сессии: Если вы не находитесь в tmux, используйте следующую команду для подключения к нужной сессии:

    tmux attach-session -t <session_name>

    Здесь <session_name> — это идентификатор сессии, который вы получили с помощью команды list-sessions.

  3. Подключение из другой tmux-сессии: Если вы уже работаете внутри tmux, можно столкнуться с ошибкой при попытке подключиться к другой сессии. В этом случае более эффективным будет использование команд для управления окнами или панелями.

  4. Управление окнами и панелями: Если у вас есть потребность в перемещении окон или панелей между сессиями, вы можете использовать команды:

    • Для перемещения окна:

      tmux move-window -s <source_window> -t <target_window>

      Здесь <source_window> и <target_window> — это идентификаторы окон в формате session_number:window_number.

    • Для перемещения панели:

      tmux move-pane -s <source_pane> -t <target_pane>

      Формат для идентификаторов: session_number:window_number.pane_number.

Применение

Практическое использование tmux требует определённого уровня минимальной настройки для упрощения работы. Например, вы можете настроить свою оболочку (например, zsh), чтобы быстро подключаться к последней активной сессии tmux.

Для этого можно добавить в ~/.zshrc следующее:

function tmux_last_session(){
    LAST_TMUX_SESSION=$(tmux list-sessions | awk -F ":" '{print$1}' | tail -n1);
    tmux attach -t $LAST_TMUX_SESSION
}
bindkey -s '^s' 'tmux_last_session ^M'

После добавления этого кода, не забудьте выполнить:

source ~/.zshrc

Теперь вы можете использовать комбинацию клавиш Ctrl+s для быстрого подключения к последней отсоединённой сессии tmux.

Заключение

Использование tmux позволяет гораздо эффективнее управлять терминальными сессиями, особенно в удалённой среде, такой как AWS EC2. Знания о том, как правильно включаться и переключаться между сессиями, а также возможности тонкой настройки tmux, значительно улучшат ваши рабочие процессы и продуктивность в ИТ-среде. Эти инструменты обеспечат бесперебойный доступ к важной информации и поддержание процессов независимо от вашего текущего физического присутствия у системы.

Оцените материал
Добавить комментарий

Капча загружается...