tmux에 GNU Screen의“log”명령과 동일한 기능이 있습니까?


35

주어진 환경에서 변경할 때 화면의 "log"명령을 많이 사용하여 세션의 출력을 파일에 기록합니다. tmux의 매뉴얼 페이지를 검색했지만 해당 항목을 찾을 수 없습니다. 누구든지 tmux의 비슷한 기능을 알고 있습니까, 아니면이를 위해 래퍼 스크립트를 작성해야합니까?

편집 : 나는 '스크립트'와 세션을 기록 할 수있는 다른 유틸리티를 알고 있습니다. 화면 기능이 매우 유용한 이유는 문자열 이스케이프를 사용하여 각 세션을 고유하게 식별하는 로그 파일 변수를 정의 할 수 있기 때문입니다.

예를 들어, 호스트 이름이 주어지면 새 화면 창에서 해당 호스트에 SSH 연결하고 창 제목을 호스트 이름으로 설정하는 쉘 기능이 있습니다. 해당 세션의 로그를 시작할 때 창 제목이 접두사로 붙습니다.

이 기능이 tmux에 존재하지 않으면 로깅하려는 세션의 '스크립트'를 설정하기 위해 새로운 쉘 기능 세트를 작성해야합니다. 이것은 어렵지 않지만 화면이 이미 필요한 것을 정확하게 수행한다는 점에서 노력할 가치가 없습니다.

답변:


39

화면 구성을 올바르게 해독 했는지 확인하십시오.

  • 나중에 시작될 로그 파일의 이름을 구성하기 위해 logfile "%t-screen.log"(아마 .screenrc파일에서) 같은 것을 사용합니다 .
  • 당신은 사용 title <hostname>(칼슘 A) 화면 새 창 제목을 설정하는 명령을, 또는
    당신이 할 screen -t <hostname> ssh0 <hostname>새 화면 세션을 시작합니다.
  • Ca H (Ca : log) 화면 명령을 사용하여 로깅을 구성된 파일로 전환합니다.

그렇다면 셸 명령 에서 #W를 지원 하려면 tmux 1.3 이상이 필요 하고 tmux 1.0 이상 에서 사용 가능합니다 .pipe-panepipe-pane

  • 구성 파일에서 (예 :) .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. 두 개의 바인딩이 허용되는 경우 다음을 시도하십시오.

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'

좋은! 그것은 내가 필요한 것을 거의 정확하게하는 것처럼 보입니다.
Murali Suriar

허름 따라서 쉘에서 이것을 시도하면 몇 가지 문제가 발생합니다. 전체 라인을 tmux로 전달하는 방법에 대한 제안이 있으십니까? "
Murali Suriar

2
@KamilDziedzic : 당신은 (즉, 쉘을 시작하기 전에) tmux pipe-pane …당신 의 명령을 포함하려고 시도 할 수있다 default-command; 물론 "기본"창에서만 작동합니다 (예 : 명시 적 명령으로 시작된 항목 없음 new-window sqlite3). "후크"지원은 향후 버전의 tmux포함될 수 있다는 힌트가 있습니다 . 이것이 당신이 명령을 구성 할 수 있습니다 (예를 들어 pipe-pane …)이 자동으로 다른 명령 다음에 실행되도록 new-session, new-window또는 split-pane).
Chris Johnsen

1
@sebelk : 개별 라인은 "항목"이라고 생각한다면 당신은 쉘을 사용할 수 readdate그 배열 할 수 있습니다. 예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"'
Chris Johnsen

1
@ChrisJohnsen, ... bash가 4.1 이상인 것을 알면 훨씬 더 효율적으로 만들 수 있습니다. date각 출력 라인에 대해 새로운 복사본을 실행하기 위해 서브 쉘을 생성하는 것은 심각한 성능 저하가 될 것입니다! 훨씬 더 낫습니다 printf '%(%Y%m%dT%H%M%S)T: %s\n' "$line"(tmux 구성 파일에 포함하기 위해 필요한 경우 이스케이프 처리하여 아마도 s를 두 배로 늘리고 %s이스케이프 처리 ").
Charles Duffy

5

키 바인딩을 엉망으로 만들지 않고 로깅을 활성화하는 tmux 플러그인은 다음과 같습니다 .tmux.conf.

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

풍모:

  • prefix + P창 로깅을 토글합니다. 원하지 않는 ANSI 문자에서 출력이 지워집니다!
  • prefix + Alt + P 전체 창 기록을 파일에 저장

4

tmux에 대한 설명서를 살펴본 후 화면의 창 로깅과 동등한 내용을 찾을 수 없습니다. 쉘 기능을 사용하여 원하는 것을 수행하거나 화면을 사용해야하는 것처럼 보입니다. 디버깅은 서버와 클라이언트 측 모두에 기록 할 수 있지만 외부에 많은 tmux 관련 로그도 포함되어 있기 때문에 원하는 것이 정확히 아닙니다.

tmux의 클립 보드를 사용하여 버퍼를 다른 세션에 자동으로 저장하는 것이 가능합니다.이 세션은 클립 보드의 내용을 수락하고 파일로 저장하도록 설정됩니다. 이것은 일종의 해킹처럼 보입니다.


1
그것은 나의 결론이기도했다. 나는이 화면을 고수하기로 결정했습니다.이 부끄러움 이외에 tmux는 꽤 좋은 것 같습니다.
Murali 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에 있고 화면 로깅을 사용하려면 어쨌든 새 쉘을 시작해야합니다.
Arcege
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.