Czy w tmux istnieje odpowiednik polecenia „log” GNU Screen?


35

Często używam komendy screen „log” do rejestrowania danych wyjściowych sesji w pliku, gdy dokonuję zmian w danym środowisku. Przeszukałem stronę podręcznika tmux, ale nie mogłem znaleźć odpowiednika. Czy ktoś wie o podobnej funkcji w tmuxie, czy muszę napisać własne skrypty opakowania, aby to zrobić?

EDYCJA: Mam świadomość „skryptu” i innych narzędzi, które pozwalają mi zalogować sesję. Powodem, dla którego funkcjonalność screena jest tak przydatna, jest możliwość zdefiniowania zmiennej pliku dziennika, która używa znaków zmiany znaczenia w celu jednoznacznego zidentyfikowania każdej sesji.

np. Mam funkcję powłoki, która, biorąc pod uwagę nazwę hosta, prześle SSH do tego hosta w nowym oknie ekranowym i ustawi tytuł okna na nazwę hosta. Kiedy uruchamiam dziennik tej sesji, jest on poprzedzony tytułem okna.

Jeśli ta funkcja nie istnieje w tmux, będę musiał utworzyć nowy zestaw funkcji powłoki, aby skonfigurować „skrypty” sesji, które chcę rejestrować. Nie jest to niezwykle trudne, ale może nie być warte wysiłku, biorąc pod uwagę, że ekran robi dokładnie to, czego już potrzebuję.

Odpowiedzi:


39

Pokaż mi, czy poprawnie odczytałem konfigurację ekranu :

  • Używasz czegoś takiego logfile "%t-screen.log"(prawdopodobnie w .screenrcpliku), aby skonfigurować nazwę pliku dziennika, który zostanie uruchomiony później.
  • Użyć title <hostname>(CA A) na ekranie polecenia, aby ustawić tytuł w nowym oknie lub
    zrobić screen -t <hostname> ssh0 <hostname>, aby rozpocząć nową sesję screen.
  • Użyj komendy ekranowej Ca H (Ca: log), aby przełączyć logowanie do skonfigurowanego pliku.

Jeśli tak, to jest prawie równoważny (wymaga tmux 1.3+ do obsługi #W w pipe-panepoleceniu powłoki; pipe-panejest dostępny w tmux 1.0+):

  • W pliku konfiguracyjnym (np. .tmux.conf):

    bind-key H pipe-pane -o "exec cat >>$HOME/'#W-tmux.log'"
    
  • Użyj tmux rename-window <hostname>(Cb,), aby zmienić nazwę istniejącego okna, lub
    użyj, tmux new-window -n <hostname> 'ssh <hostname>'aby rozpocząć nowe okno tmux , lub
    użyj, tmux new-session -n <hostname> 'ssh <hostname>'aby rozpocząć nową sesję tmux .
  • Użyj Cb H, aby przełączyć rejestrowanie.

Nie ma powiadomienia, że ​​dziennik został przełączony, ale możesz go dodać, jeśli chcesz:

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

Uwaga: powyższy wiersz jest pokazany tak, jakby znajdował się w pliku konfiguracyjnym (jeden .tmux.conflub jeden source). tmux musi widzieć zarówno odwrotny ukośnik, jak i średnik; jeśli chcesz skonfigurować to z powłoki (np. tmux bind-key …), będziesz musiał odpowiednio uciec lub zacytować oba znaki, aby zostały dostarczone do tmux w stanie nienaruszonym. Wydaje się, że nie ma wygodnego sposobu wyświetlania różnych komunikatów do włączania / wyłączania podczas używania tylko pojedynczego powiązania (możesz być w stanie coś sfałszować if-shell, ale prawdopodobnie byłoby to brzydkie). Jeśli dopuszczalne są dwa powiązania, spróbuj tego:

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'

Miły! To wygląda dokładnie tak, jak potrzebuję.
Murali Suriar

Hrrm. Próba zrobienia tego z powłoki powoduje pewne problemy. Wszelkie sugestie, jak poradzić sobie z przejściem całej linii do tmux w stanie nienaruszonym? ”
Murali Suriar

2
@KamilDziedzic: Możesz spróbować dołączyć tmux pipe-pane …polecenie do swojego default-command(tj. Przed uruchomieniem powłoki); oczywiście działałoby to tylko w przypadku okien „domyślnych” (nic nie zaczęło się od jawnych poleceń, np new-window sqlite3.). Pojawiły się wskazówki, że obsługa „hook” może wylądować w przyszłej wersji tmux ; Może to pozwolić skonfigurować polecenie (np pipe-pane …) mają być automatycznie uruchamiane po innej komendy new-session, new-windowlub split-pane).
Chris Johnsen,

1
@sebelk: Jeśli uważasz, że indywidualna linia jest „wpisem”, możesz użyć powłoki readi dateto zaaranżować. Egbind-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, ... to mogłoby uczynić znacznie bardziej wydajnym, gdybyśmy wiedzieli, że bash ma 4.1 lub nowszą wersję - odrodzenie podpowłoki do uruchomienia nowej kopii datedla każdego wiersza wyników będzie poważnym spadkiem wydajności! Znacznie lepiej printf '%(%Y%m%dT%H%M%S)T: %s\n' "$line"(uciekaj, jeśli jest to konieczne do włączenia do pliku konfiguracyjnego tmux, prawdopodobnie podwajając %si uciekając ").
Charles Duffy

5

Oto wtyczka tmux, która umożliwia logowanie bez bałaganu przy pomocy klawiszy .tmux.conf:

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

Cechy:

  • prefix + Pprzełącza rejestrowanie okienka. Wyjście jest usuwane z niechcianych znaków ANSI!
  • prefix + Alt + P zapisuje pełną historię panelu do pliku

4

Po przejrzeniu dokumentacji tmux nie mogę znaleźć żadnego odpowiednika rejestrowania okien na ekranie. Wygląda na to, że będziesz musiał użyć funkcji powłoki, aby zrobić to, co chcesz, lub po prostu użyć ekranu. Możesz włączyć debugowanie, które rejestruje zarówno serwer, jak i stronę klienta, ale zawiera również wiele zewnętrznych dzienników związanych z tmux, więc nie byłoby to dokładnie to, o co prosiłeś.

Możesz użyć schowka tmux do zautomatyzowania zapisywania bufora do innej sesji, która zostałaby skonfigurowana do akceptowania zawartości schowka i zapisywania do pliku. To wydaje się trochę hackerskie.


1
To też był mój wniosek. Zdecydowałem się na razie trzymać z ekranem, co jest wstydem, ponieważ poza tym niedopatrzeniem tmux wydaje się całkiem niezły.
Murali Suriar

1

robię to za pomocą skryptu, to z mojego pliku 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
Słabe zastąpienie polecenia screen log, które pozwala na logowanie w locie. Ale jeśli jesteś w tmuxie i chcesz użyć rejestrowania ekranu, musisz mimo wszystko uruchomić nową powłokę.
Arcege
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.