#tmux
#tmux
Вопрос:
У нас есть скрипт bash, который мы можем запустить на узле доступа к кластеру, который выполняет htop на всех дочерних узлах кластера, чтобы мы могли контролировать весь кластер одновременно.
Теперь мой вопрос заключается в том, существует ли способ привязки Ctrl-C
или q
для этого скрипта, без необходимости использования префикса tmux. Идея заключается в том, что это заставило бы скрипт вести себя очень похоже на обычную команду htop (которая использует привязку ключа q для выхода), и другим пользователям не пришлось бы углубляться в особенности использования tmux, когда они хотят выйти из окна.
Я знаю, что есть способ изменить поведение с помощью .tmux.conf
файла. Однако мы не хотим устанавливать эти привязки клавиш глобально, а только для этого одного скрипта.
Командный сценарий bash выглядит следующим образом:
tmux new -s logs_htop -d ssh-run htop 1
tmux select-pane -T 'cn01'
tmux splitw -v -p 50 -t logs_htop:0.0 ssh-run htop 5
tmux select-pane -T 'cn05'
tmux splitw -h -p 75 -t logs_htop:0.0 ssh-run htop 2
tmux select-pane -T 'cn02'
tmux splitw -h -p 66 -t logs_htop:0.1 ssh-run htop 3
tmux select-pane -T 'cn03'
tmux splitw -h -p 50 -t logs_htop:0.2 ssh-run htop 4
tmux select-pane -T 'cn04'
tmux splitw -h -p 75 -t logs_htop:0.4 ssh-run htop 6
tmux select-pane -T 'cn06'
tmux splitw -h -p 66 -t logs_htop:0.5 ssh-run htop 7
tmux select-pane -T 'cn07'
tmux splitw -h -p 50 -t logs_htop:0.6 "watch squeue -al"
tmux select-pane -T 'squeue'
tmux attach -t logs_htop
Комментарии:
1. Как этот скрипт будет использоваться
C-c
в качестве привязки tmux? Почему вы хотите, чтобы скрипт мог использовать привязку ключей?2. Нет необходимости в «классической» привязке ключа tmux, поскольку мне не нужны никакие другие функции tmux, кроме разделения экрана и запуска htop на разных узлах кластера. В принципе, как только приведенный выше сценарий будет выполнен и покажет разные htops, мне нужен простой и «интуитивно понятный» способ завершить весь сеанс. Таким образом, пользователи могут либо нажать
Ctrl-C
, либоq
существовать во время сеанса. Поскольку это поведение, которое они ожидают при выполнении обычной команды htop.
Ответ №1:
Да, это возможно при подключении к другому сокету tmux с помощью настраиваемого файла конфигурации tmux.
Сначала создайте свою пользовательскую привязку ключа tmux в отдельном файле conf:
mkdir -p /etc/tmux
echo "bind-key -n C-c kill-session" > /etc/tmux/tmux-logs-htop.conf
# do not recommend q as htop is context-sensitive and q does not *always* mean quit
echo "bind-key -n q kill-session" >> /etc/tmux/tmux-logs-htop.conf
Затем создайте свой собственный сервер tmux:
tmux -L logs_htop -f /etc/tmux/tmux-logs-htop.conf
Наконец, отредактируйте свой скрипт, чтобы к каждой команде добавлялся префикс с конкретным сервером socket / tmux, на который будут поступать команды:
tmux -L logs_htop new -s logs_htop -d ssh-run htop 1
...
От man tmux
:
-L socket-name
tmux stores the server socket in a directory under TMUX_TMPDIR or /tmp if it is unset.
The default socket is named default. This option allows a different socket name to be
specified, allowing several independent tmux servers to be run. Unlike -S a full path is
not necessary: the sockets are all created in the same directory.
Комментарии:
1. Это работает, спасибо! Еще одна вещь. Когда я помещаю все это в один скрипт, включая мой скрипт, сначала он открывает консоль tmux с новым сервером, который я должен отсоединить вручную, и он выполняется с остальной частью моего вышеупомянутого скрипта. Если я добавлю
-d
флаг к вашей команде:tmux -L logs_htop -f /etc/tmux/tmux-logs-htop.conf -d
, то привязки клавиш больше не будут работать. Есть ли какой-нибудь обходной путь, который позволяет поместить все это в один скрипт?2. Вы пытались «отредактировать свой скрипт так, чтобы к каждой команде добавлялся определенный сокет»?
3. Я нашел проблему. У меня там был дополнительный
tmux -L logs_htop kill-session -t logs_htop
, где первоначальная идея заключалась в том, чтобы прервать сеанс, если какой-то пользователь отсоединит его. Потому что предыдущий запуск скрипта, отсоединение и повторный запуск вложили скрипт в первый открытый сеанс tmux. Однако здесь мне больше не нужен сеанс уничтожения. Еще раз спасибо вам за отличный совет!