tmuxにはGNU Screenの「ログ」コマンドに相当するものがありますか?


35

特定の環境で変更を行っているときに、画面の「ログ」コマンドを頻繁に使用して、セッションの出力をファイルに記録します。tmuxのマニュアルページを検索しましたが、同等のものが見つかりませんでした。tmuxの同様の機能を知っている人はいますか、これを行うには独自のラッパースクリプトを作成する必要がありますか?

編集:私はセッションをログに記録することを可能にする「スクリプト」および他のユーティリティを知っています。画面の機能が非常に役立つ理由は、文字列エスケープを使用して各セッションを一意に識別するログファイル変数を定義する機能です。

たとえば、ホスト名を指定すると、新しい画面ウィンドウでそのホストにSSH接続し、ウィンドウタイトルをホスト名に設定するシェル関数があります。そのセッションのログを開始すると、ウィンドウタイトルがプレフィックスとして付けられます。

この機能がtmuxに存在しない場合は、新しいシェル関数のセットを作成して、記録するセッションの「スクリプト」を設定する必要があります。これはそれほど難しいことではありませんが、画面がすでに必要なことを正確に実行できることを考えると、努力する価値はないかもしれません。

回答:


39

画面構成を正しく解読したかどうかを確認します

  • logfile "%t-screen.log"(おそらく.screenrcファイルで)のようなものを使用して、後で開始されるログファイルの名前を構成します。
  • あなたは使うtitle <hostname>(CA A)画面新しいウィンドウのタイトルを設定するコマンドを、または
    あなたが行うscreen -t <hostname> ssh0 <hostname>新しい画面セッションを開始します。
  • Ca H(Ca:log)画面コマンドを使用して、構成済みファイルへのロギングを切り替えます。

もしそうであれば、(必要とほぼ同等であるTMUX 1.3以降で#Wをサポートするために、pipe-paneシェルコマンド、pipe-paneで入手可能であるTMUX 1.0+)。

  • 構成ファイル(例.tmux.conf):

    bind-key H pipe-pane -o "exec cat >>$HOME/'#W-tmux.log'"
    
  • 使用tmux rename-window <hostname>(CB)既存のウィンドウ、または名前を変更する
    使用をtmux new-window -n <hostname> 'ssh <hostname>'新たに開始するtmuxののウィンドウを、または
    使用tmux new-session -n <hostname> 'ssh <hostname>'新しい開始するtmuxののセッションを。
  • Cb Hを使用して、ロギングを切り替えます。

ログが切り替えられたという通知はありませんが、必要に応じて追加できます。

bind-key H pipe-pane -o "exec cat >>$HOME/'#W-tmux.log'" \; display-message 'Toggled logging to $HOME/#W-tmux.log'

注:上記の行は、構成ファイル(.tmux.confまたはどちらか一方source)にあるかのように表示されます。tmuxは、バックスラッシュとセミコロンの両方を見る必要があります。これをシェルから構成する場合(例tmux bind-key …:)、両方の文字を適切にエスケープまたは引用して、tmuxにそのまま配信されるようにする必要があります。単一のバインディングのみを使用する場合、オン/オフを切り替えるためのさまざまなメッセージを表示する便利な方法はないようです(何かをリグできるかもしれませんがif-shell、おそらくprobablyいでしょう)。2つのバインディングが許容される場合、これを試してください:

bind-key H pipe-pane "exec cat >>$HOME/'#W-tmux.log'" \; display-message 'Started logging to $HOME/#W-tmux.log'
bind-key h pipe-pane \; display-message 'Ended logging to $HOME/#W-tmux.log'

いいね!それは私が必要としていることをほとんど正確に行うように見えます。
ムラリSuriar

うん そのため、シェルからこれを実行しようとすると、いくつかの問題が発生します。回線全体をそのままtmuxに渡す方法についての提案はありますか?」
Murali Suriar

2
@KamilDziedzic:(シェルを起動する前に)tmux pipe-pane …コマンドをコマンドに含めてみてくださいdefault-command。もちろん、これは「デフォルト」ペインでのみ機能します(明示的なコマンドで開始するものはありません(例:)new-window sqlite3)。tmuxの将来のバージョンで「フック」サポートが提供される可能性があるというヒントがありました。これにより、pipe-pane …他のコマンド、、または)の後に自動的に実行されるようにコマンド(例えば)を構成できます。new-sessionnew-windowsplit-pane
クリスジョンセン

1
@sebelk:個々の行を「エントリ」と見なす場合、シェルを使用してreadそれdateを配置できます。例えばbind-key H pipe-pane -o 'exec bash -c "while IFS= read -r line; do echo \"\$(date +%%Y%%m%%dT%%H%%M%%SZ%%z): \$line\"; done" >>$HOME/"#W-tmux.log"'
クリス・ヨンセン

1
@ChrisJohnsen、... bashが4.1以降であることがわかっていれば、はるかに効率的になる可能性があります- date出力の各行に対して新しいコピーを実行するサブシェルを作成すると、パフォーマンスが大幅に低下します!はるかに良好にprintf '%(%Y%m%dT%H%M%S)T: %s\n' "$line"(従っておそらく倍加、TMUX configファイルに含めるために、必要に応じてエスケープ%sとエスケープ"秒)。
チャールズダフィー

5

以下は、キーバインディングを台無しにしないでロギングを可能にするtmuxプラグインです.tmux.conf

https://github.com/tmux-plugins/tmux-logging

特徴:

  • prefix + Pペインのロギングを切り替えます。不要なANSI文字の出力は消去されます!
  • prefix + Alt + P 完全なペイン履歴をファイルに保存します

4

tmuxのドキュメントを調べた後、画面のウィンドウロギングに相当するものが見つかりません。シェル関数を使用して必要な処理を行うか、単に画面を使用する必要があるようです。サーバー側とクライアント側の両方をログに記録するデバッグを有効にできますが、多くの無関係なtmux関連のログも含まれているため、正確に求めるものではありません。

おそらく、tmuxのクリップボードを使用して、バッファーの別のセッションへの保存を自動化できます。このセッションは、クリップボードの内容を受け入れてファイルに保存するようにセットアップされます。これは一種のハッキングのようです。


1
それも私の結論でした。私は今のところ画面に固執することに決めました。これは残念ですが、この見落とし以外はtmuxはかなりいいようです。
ムラリSuriar

1

私はスクリプトを使用してそれを行います、これは私のtmux.confファイルからです

bind ^C new-window "script -f /home/jcosta/mydocs/work/logs/$(date '+%d%m%Y_%H%M%S')_$$.log"
bind c new-window "script -f /home/jcosta/mydocs/work/logs/$( date '+%d%m%Y_%H%M%S')_$$.log"
bind | split-window "script -f /home/jcosta/mydocs/work/logs/$(date '+%d%m%Y_%H%M%S')_$$.log"

1
画面のlogコマンドの代わりとしては不十分で、その場でログを記録できます。ただし、tmuxで画面のログを使用する場合は、とにかく新しいシェルを起動する必要があります。
アルケージュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.