Tmux'ta GNU Screen'in “log” komutunun bir eşdeğeri var mı?


35

Belirli bir ortamda değişiklikler yaparken bir oturumun çıktısını bir dosyaya kaydetmek için ekranın "log" komutunu çok kullanırım. Tmux'un man sayfasını aradım, ancak bir eşdeğer bulamadım. Tmux'da benzer bir özellikten haberi olan var mı yoksa bunu yapmak için kendi sarmalayıcı komut dosyalarımı yazmak zorunda mıyım?

EDIT: 'script' ve oturum açmamı sağlayan diğer yardımcı programların farkındayım. Ekranın işlevselliğinin bu kadar kullanışlı olmasının nedeni, her bir oturumu benzersiz bir şekilde tanımlamak için string kaçışlarını kullanan bir günlük dosyası değişkeni tanımlama yeteneğidir.

Örneğin, bir ana bilgisayar adı verilen yeni bir ekran penceresinde bu ana bilgisayara SSH yapacak ve pencere başlığını ana bilgisayar adına ayarlayacak bir kabuk işlevim var. Bu oturumun bir günlüğüne başladığımda, pencere başlığının önüne eklenir.

Eğer bu işlevsellik tmux'ta mevcut değilse, günlüğe kaydetmek istediğim oturumların komut dosyalarını ayarlamak için yeni bir kabuk işlevi kümesi oluşturmak zorunda kalacağım. Bu oldukça zor değil, ama o ekranın zaten ihtiyacım olanı yapması için harcanan emeğe değmeyebilir.

Yanıtlar:


39

Ekran yapılandırmanızı doğru bir şekilde deşifre edip etmediğimi göreyim :

  • Daha sonra başlatılacak olan günlük dosyasının adını yapılandırmak için logfile "%t-screen.log"(muhtemelen bir .screenrcdosyada) gibi bir şey kullanırsınız .
  • Sen kullanmak title <hostname>(Ca A) ekran yeni bir pencerenin başlığını ayarlamak için komutu veya
    yapmanız screen -t <hostname> ssh0 <hostname>yeni bir ekran oturumu başlatmak için.
  • Yapılandırılan dosyaya günlüğü değiştirmek için Ca H (Ca: log) ekran komutunu kullanın.

Öyleyse, hemen hemen eşdeğerdir ( kabuk komutunda #W'yi desteklemek için tmux 1.3+ pipe-pane; tmux 1.0+ sürümünde pipe-panekullanılabilir ):

  • Bir yapılandırma dosyasında (örn. .tmux.conf):

    bind-key H pipe-pane -o "exec cat >>$HOME/'#W-tmux.log'"
    
  • Kullanım tmux rename-window <hostname>(Cb) Mevcut bir pencereyi yeniden adlandırmak veya
    kullanmak tmux new-window -n <hostname> 'ssh <hostname>', yeni bir başlangıç için tmux pencere veya
    kullanımını tmux new-session -n <hostname> 'ssh <hostname>'yeni başlamak için tmux oturumu.
  • Günlüğü değiştirmek için Cb H kullanın.

Günlüğün değiştirildiğine dair hiçbir bildirim yok, ancak isterseniz bir tane ekleyebilirsiniz:

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

Not: Yukarıdaki satır bir yapılandırma dosyasındaymış gibi gösterilir ( .tmux.confsiz veya bir tanesine source). tmux'un hem ters eğik çizgiyi hem de noktalı virgül görmesi gerekir; Eğer bir kabuk (örneğin bu yapılandırmak istiyorsanız tmux bind-key …), o zaman kaçmak ya da teslim edilmesi uygun böylece hem karakterleri alıntı zorunda kalacaktır tmux bozulmamış. Yalnızca tek bir ciltleme kullanırken açma / kapama için farklı mesajlar göstermenin uygun bir yolu görünmüyor (bir şeyi bir araya getirebilirsiniz if-shell, ancak muhtemelen çirkin olabilir). İki bağlama kabul edilebilirse, şunu deneyin:

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'

Güzel! Bu tam olarak ihtiyacım olanı yapmak gibi görünüyor.
Murali Suriar

Hrrm. Bu yüzden bunu kabuktan yapmaya çalışmak bazı sorunlar doğurur. Tüm hattın
tmux'a

2
@KamilDziedzic: içine bir tmux pipe-pane …komut eklemeyi deneyebilirsin default-command(yani bir kabuk başlatmadan önce); Tabii ki sadece “varsayılan” paneller için işe yarar (örneğin açık komutlarla hiçbir şey başlatılmadı new-window sqlite3). Gelecekteki tmux versiyonunda “kanca” desteğinin karara varabileceği konusunda ipuçları var ; bu , pipe-pane …başka bir komuttan sonra otomatik olarak çalıştırılacak bir komutu (örn. ) yapılandırmanıza izin verebilir , veya ). new-sessionnew-windowsplit-pane
Chris Johnsen

1
@sebelk: Bağımsız bir satır bir “giriş” olarak kabul ederse o zaman bir kabuk en kullanabilirsiniz readve dateo düzenlemek için. Örnbind-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"'
Chris Johnsen,

1
@ChrisJohnsen ... belirtti olabilir uzakta yeni bir kopyasını çalıştırmak için bir altkabuk yumurtlama - biz bash 4.1 veya daha yeni olduğunu bilse daha verimli dateher çıktı satırının ciddi performans isabet olacak için! Çok daha iyi printf '%(%Y%m%dT%H%M%S)T: %s\n' "$line"(bir tmux config dosyasına dahil edilmek için gerektiği kadar kaçmak, dolayısıyla muhtemelen s'yi ikiye katlamak %sve kaçmak ").
Charles Duffy

5

Anahtar bağlantılarıyla uğraşmadan günlüğe kaydetmeyi sağlayan bir tmux eklentisi .tmux.conf:

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

Özellikleri:

  • prefix + Pbölmeyi günlüğe değiştirir. Çıktı, istenmeyen ANSI karakterlerinden silindi!
  • prefix + Alt + P Komple bölme geçmişini bir dosyaya kaydeder.

4

Tmux'un belgelerine baktıktan sonra, ekranın pencere günlüğüne denk bir şey bulamıyorum. İstediğiniz şeyi yapmak için kabuk işlevlerinizi kullanmanız veya sadece ekranı kullanmanız gerekecek gibi görünüyor. Hem sunucu hem de istemci tarafını kaydeden hata ayıklamayı açabilirsiniz, ancak aynı zamanda çok sayıda tmux ile ilgili günlük de içerir, bu nedenle tam olarak istediğiniz şey olmaz.

Tamponu başka bir oturuma kaydetmeyi otomatikleştirmek için tmux'un panosunu kullanabilirsiniz, bu panonun içeriğini kabul edip bir dosyaya kaydeder. Bu biraz garip görünüyor.


1
Benim sonucum da buydu. Şimdilik ekrana bağlı kalmaya karar verdim, utanç verici, bu gözetim dışında, tmux oldukça hoş görünüyor.
Murali Suriar

1

komut dosyası kullanarak yapıyorum, bu benim tmux.conf dosyamdan

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
logAnında oturum açmaya izin veren ekran komutunun yerine kötü bir alternatif . Ancak, eğer tmux'unuz ve ekranın günlüğünü kullanmak istiyorsanız, yine de yeni bir kabuk başlatmanız gerekir.
Arcege
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.