Как получить полный журнал консоли моей tmux-сессии в Linux?

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

У меня есть виртуальная машина на 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, а также каждую введенную команду. Это может быть довольно сложно для анализа.

Два лучших решения, которые я нашел:

  1. Использовать tmux pipe-pane. В справочнике man для Tmux есть пример привязки этой команды к клавише в вашем файле .tmux.conf, например, bind-key C-p pipe-pane -o 'cat >>~/output.#I-#P'. По сути, это немного более лучшая версия вывода, которую вы получаете с -v -v.
  2. В случаях, когда я собираюсь запускать скрипт в сессии 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 предусмотрены разнообразные функции для управления выводом:

  1. Режим копирования (Copy Mode):
    Чтобы активировать режим прокрутки, используйте сочетание клавиш Prefix (обычно Ctrl + B), затем нажмите [. После этого вы сможете использовать стрелки на клавиатуре для прокрутки назад по истории.

  2. Сохранение буфера в файл:
    Для записи вывода всей панели в файл используйте следующие команды:

    • Откройте командную строку tmux с помощью Prefix + :.
    • Введите команду capture-pane -S - для захвата содержимого панели.
    • Снова откройте командную строку и введите save-buffer ~/tmux-buffer.txt, чтобы сохранить содержимое буфера в файл.

Применение: Организация вывода и логирование

Если заранее известно, что потребуется полный лог вывода программы, есть еще несколько подходов, которые могут быть полезными:

  • Использование команды 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-сессий, сохраняя производительность и упрощая процесс анализа логов. Включив эти команды в свои регулярные практики, вы сможете оптимизировать рабочий процесс и лучше управлять вашими инженерными задачами.

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

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