Вопрос или проблема
У меня есть виртуальная машина на Linux в Google Cloud, и на ней запущена tmux-сессия, которая выполняет .py файл. Я пытаюсь получить лог консоли, но не могу прокрутить вверх или что-то подобное.
Есть идеи?
Вы не упомянули, как именно пытаетесь прокручивать. Если вы пытаетесь прокручивать окно терминала, то это не сработает, так как Tmux — это полноэкранное приложение. Это как пытаться прокручивать vim
(или любой другой редактор).
Однако есть несколько вариантов:
Режим копирования в Tmux
Стандартная клавиатурная комбинация для активации механизма прокрутки в Tmux (известного как режим копирования) — это Prefix (обычно Ctrl+B), затем [. Прокручивайте с помощью клавиш со стрелками.
Сохранить весь буфер
Вы также можете извлечь весь буфер в файл одним из (по крайней мере) двух способов. Во-первых, если бы у вас была командная строка, вы могли бы:
tmux capture-pane -pS - > ~/tmux-buffer.txt
Но поскольку вы упомянули, что выполняете программу на Python, вам нужно будет:
- Получить доступ к командной строке Tmux с помощью Prefix:
- Сохранить панель в буфер с помощью:
capture-pane -S -
- Снова получить доступ к командной строке Tmux (Prefix:)
- Сохранить буфер в файл с помощью:
save-buffer ~/tmux-buffer.txt
Альтернатива — это комбинировать предыдущие два варианта и выполнить команду tmux
в run-shell
:
- Получить доступ к командной строке Tmux с помощью Prefix:
- Выполнить первую команду Tmux через:
run-shell "tmux capture-pane -pS - > ~/tmux-buffer.txt"
Отправить буфер в другой пейджер
Из командной строки:
tmux capture-pane -pS - | less
Из командной строки Tmux:
run-shell "tmux capture-pane -pS - | less"
Еще лучше, сохраните коды экранирования, и вы сможете включить дополнительное форматирование и цвета:
tmux capture-pane -epS - | less -r
tee
Наконец, не забывайте про полезность команды tee
в данной ситуации. Если вы заранее знаете, что захотите захватить вывод программы, отправьте его как на экран, так и в файл, используя tee
:
python myprog.py 2>&1 | tee ~/myprog-out.txt
Это захватит как stdout
, так и stderr
, конечно.
Конечно, со всеми предыдущими способами Tmux дополнительное планирование заранее действительно не требуется.
Я пытаюсь получить лог консоли, но не могу прокрутить вверх или что-то подобное.
Получение лога консоли
Tmux не имеет встроенного (полезного) механизма логирования.
Технически вы можете заставить каждую сессию Tmux вести логирование всего, запуская Tmux с опцией -v -v
. Например, tmux -v -v new-session -s test
. Это создаст 3 файла журнала в текущей директории для журнала сервера, журнала клиента и журнала вывода. Серверные и клиентские журналы предназначены для регистрации статуса и сообщений, на которые вы, вероятно, не захотите смотреть. Журнал вывода будет содержать все, что отображается в сессии. Это включает каждую переменную PS, сообщения и баннеры Tmux, а также каждую введенную команду. Это может быть довольно сложно для анализа.
Два лучших решения, которые я нашел:
- Использовать
tmux pipe-pane
. В справочнике man для Tmux есть пример привязки этой команды к клавише в вашем файле.tmux.conf
, например,bind-key C-p pipe-pane -o 'cat >>~/output.#I-#P'
. По сути, это немного более лучшая версия вывода, которую вы получаете с-v -v
. - В случаях, когда я собираюсь запускать скрипт в сессии Tmux, я фактически запускаю сессию Tmux с этим скриптом и перенаправляю его вывод в файл логов непосредственно так:
tmux new-session -d -s test "./doSomething.sh &> log.txt"
. Это запускает сессию Tmux (в фоновом режиме), запускает мой скрипт и перенаправляет все выходные данные вlog.txt
. Это обычно самое простое решение.
Я видел несколько других решений для этого. Вы можете рассмотреть этот ответ на Unix & Linux, который использует комбинацию плагинов Tmux.
Как прокрутить вверх
Чтобы включить прокрутку мышью в Tmux, нужно установить параметр окна mouse
следующим образом:
set -g mouse on
Если вы думаете, что у вас будет очень большая история, которую вы захотите прокручивать, вам также нужно будет увеличить буфер истории:
set -g history-limit 1000
Я предлагаю вам добавить это в ваш файл .tmux.conf
.
Ответ или решение
Чтобы получить полный лог консоли вашей tmux-сессии на Linux, существует несколько эффективных и практичных методов, которые помогут вам извлечь все необходимое без особых трудностей.
Теория: Почему нельзя прокрутить стандартную консоль
Tmux действует как полноэкранное приложение и, подобно таким инструментам, как vim
, консольные команды tmux полагаются на свои собственные механизмы прокрутки и управления выводом. Это значит, что попытки прокрутки окна терминала обычно не приводят к успеху.
Пример: Использование стандартных функций tmux
В tmux предусмотрены разнообразные функции для управления выводом:
-
Режим копирования (Copy Mode):
Чтобы активировать режим прокрутки, используйте сочетание клавишPrefix
(обычноCtrl
+B
), затем нажмите[
. После этого вы сможете использовать стрелки на клавиатуре для прокрутки назад по истории. -
Сохранение буфера в файл:
Для записи вывода всей панели в файл используйте следующие команды:- Откройте командную строку tmux с помощью
Prefix
+:
. - Введите команду
capture-pane -S -
для захвата содержимого панели. - Снова откройте командную строку и введите
save-buffer ~/tmux-buffer.txt
, чтобы сохранить содержимое буфера в файл.
- Откройте командную строку tmux с помощью
Применение: Организация вывода и логирование
Если заранее известно, что потребуется полный лог вывода программы, есть еще несколько подходов, которые могут быть полезными:
-
Использование команды
tee
:
Вы можете перенаправить вывод программы в файл одновременно с выводом на экран, используя команду:python myprog.py 2>&1 | tee ~/myprog-out.txt
-
Вывод с использованием
pipe-pane
:
В tmux можно настроить вывод данных в файл в режиме реального времени, добавив в.tmux.conf
следующее:bind-key C-p pipe-pane -o 'cat >>~/output.#I-#P'
Эти подходы не только помогут вам сохранить вывод на более длительное время, но и улучшат вашу способность анализировать данные в дальнейшем. Каждый подход имеет свои преимущества, и выбор метода зависит от конкретных целей и объема данных, которые вам необходимо сохранить.
Заключение
Использование данных методов позволит вам эффективно управлять выводом ваших tmux-сессий, сохраняя производительность и упрощая процесс анализа логов. Включив эти команды в свои регулярные практики, вы сможете оптимизировать рабочий процесс и лучше управлять вашими инженерными задачами.