Có một lệnh tương đương với lệnh log log của GNU Screen trong tmux không?


35

Tôi sử dụng rất nhiều lệnh "log" của màn hình để ghi nhật ký đầu ra của phiên vào một tệp, khi tôi đang thực hiện các thay đổi trong một môi trường nhất định. Tôi đã tìm kiếm thông qua trang người đàn ông của tmux, nhưng không thể tìm thấy tương đương. Có ai biết một tính năng tương tự trong tmux không, hay tôi phải viết các kịch bản trình bao bọc của riêng mình để làm điều này?

EDIT: Tôi biết về 'tập lệnh' và các tiện ích khác cho phép tôi đăng nhập một phiên. Lý do chức năng của màn hình rất hữu ích là khả năng xác định biến logfile sử dụng chuỗi thoát để xác định duy nhất mỗi phiên.

ví dụ: tôi có một hàm shell, được đặt tên máy chủ, sẽ SSH tới máy chủ đó trong cửa sổ màn hình mới và đặt tiêu đề cửa sổ thành tên máy chủ. Khi tôi bắt đầu một bản ghi của phiên đó, nó có tiền tố với tiêu đề cửa sổ.

Nếu chức năng này không tồn tại trong tmux, tôi sẽ phải tạo một bộ hàm shell mới để thiết lập 'tập lệnh' của các phiên tôi muốn đăng nhập. Điều này không quá khó khăn, nhưng nó có thể không xứng đáng với nỗ lực mà màn hình thực hiện chính xác những gì tôi cần.

Câu trả lời:


39

Hãy cho tôi biết nếu tôi đã giải mã chính xác cấu hình màn hình của bạn :

  • Bạn sử dụng một cái gì đó như logfile "%t-screen.log"(có thể trong một .screenrctệp) để định cấu hình tên của tệp nhật ký sẽ được bắt đầu sau.
  • Bạn sử dụng lệnh màn hìnhtitle <hostname> (Ca A) để đặt tiêu đề của một cửa sổ mới hoặc bạn làm để bắt đầu một phiên màn hình mới.
    screen -t <hostname> ssh0 <hostname>
  • Bạn sử dụng lệnh màn hình Ca H (Ca: log) để chuyển đổi ghi nhật ký vào tệp được định cấu hình.

Nếu vậy, thì gần như tương đương (yêu cầu tmux 1.3+ để hỗ trợ #W trong pipe-panelệnh shell; pipe-panecó sẵn trong tmux 1.0+):

  • Trong tệp cấu hình (ví dụ .tmux.conf):

    bind-key H pipe-pane -o "exec cat >>$HOME/'#W-tmux.log'"
    
  • Sử dụng tmux rename-window <hostname>(Cb,) để đổi tên một cửa sổ hiện có hoặc
    sử dụng tmux new-window -n <hostname> 'ssh <hostname>'để bắt đầu một cửa sổ tmux mới hoặc
    sử dụng tmux new-session -n <hostname> 'ssh <hostname>'để bắt đầu một phiên tmux mới .
  • Sử dụng Cb H để chuyển đổi đăng nhập.

Không có thông báo rằng nhật ký đã được bật, nhưng bạn có thể thêm một nếu bạn muốn:

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

Lưu ý: Dòng trên được hiển thị như thể nó nằm trong tệp cấu hình (một .tmux.confhoặc một trong hai bạn source). tmux cần xem cả dấu gạch chéo ngược và dấu chấm phẩy; nếu bạn muốn định cấu hình này từ trình bao (ví dụ tmux bind-key …), thì bạn sẽ phải thoát hoặc trích dẫn cả hai ký tự một cách thích hợp để chúng được gửi đến tmux nguyên vẹn. Dường như không có cách nào thuận tiện để hiển thị các thông báo khác nhau để bật / tắt khi chỉ sử dụng một ràng buộc duy nhất (bạn có thể xử lý một cái gì đó với if-shellnó, nhưng nó có thể sẽ xấu). Nếu hai ràng buộc được chấp nhận, thì hãy thử điều này:

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'

Tốt đẹp! Điều đó có vẻ để làm khá nhiều chính xác những gì tôi cần.
Murali Suriar

Hrrm. Vì vậy, cố gắng để làm điều này từ vỏ mang lại một số vấn đề. Có gợi ý nào về cách quản lý chuyển toàn bộ dòng cho tmux nguyên vẹn không? "
Murali Suriar

2
@KamilDziedzic: Bạn có thể thử bao gồm một tmux pipe-pane …lệnh trong default-command(tức là trước khi bắt đầu trình bao); tất nhiên điều đó sẽ chỉ hoạt động đối với các bảng điều khiển mặc định của hệ thống (không có gì bắt đầu bằng các lệnh rõ ràng, vd new-window sqlite3). Đã có gợi ý rằng hỗ trợ của hook hook có thể hạ cánh trong một số phiên bản tương lai của tmux ; điều này có thể cho phép bạn cấu hình một lệnh (ví dụ pipe-pane …) để được tự động chạy sau khi một số lệnh khác new-session, new-windowhoặc split-pane).
Chris Johnsen

1
@sebelk: Nếu bạn coi một dòng riêng lẻ là một mục nhập vào đường sắt thì bạn có thể sử dụng shell readdateđể sắp xếp nó. Ví dụ: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, ... có thể làm xa hiệu quả hơn nếu chúng ta biết bash là 4.1 hoặc mới hơn - sinh sản một subshell để chạy một bản sao mới của datecho mỗi dòng sản lượng sẽ là một buổi biểu diễn hit nghiêm trọng! Tốt hơn nhiều printf '%(%Y%m%dT%H%M%S)T: %s\n' "$line"(thoát khi cần thiết để đưa vào tệp cấu hình tmux, do đó có lẽ sẽ nhân đôi %svà thoát khỏi "s).
Charles Duffy

5

Đây là một plugin tmux cho phép đăng nhập mà không gặp rắc rối với các ràng buộc chính trong .tmux.conf:

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

Tính năng, đặc điểm:

  • prefix + Pbật tắt khung đăng nhập. Đầu ra bị xóa khỏi các ký tự ANSI không mong muốn!
  • prefix + Alt + P lưu lịch sử khung hoàn chỉnh vào một tập tin

4

Sau khi xem qua tài liệu về tmux, tôi không thể tìm thấy bất kỳ tương đương với ghi nhật ký cửa sổ màn hình. Có vẻ như bạn phải sử dụng các chức năng hệ vỏ của mình để làm những gì bạn thích hoặc chỉ sử dụng màn hình. Bạn có thể bật gỡ lỗi, ghi nhật ký cả phía máy chủ và máy khách, nhưng nó cũng bao gồm rất nhiều nhật ký liên quan đến tmux bên ngoài, vì vậy nó sẽ không chính xác những gì bạn yêu cầu.

Bạn có thể có thể sử dụng bảng tạm của tmux để tự động lưu bộ đệm vào phiên khác, phiên bản này sẽ được thiết lập để chấp nhận nội dung của bảng tạm và lưu vào tệp. Điều này có vẻ như hackish.


1
Đó là kết luận của tôi là tốt. Tôi đã quyết định gắn bó với màn hình bây giờ, đó là một sự xấu hổ, vì ngoài sự giám sát này, tmux có vẻ khá đẹp.
Murali Suriar

1

Tôi làm điều đó bằng cách sử dụng tập lệnh, đây là từ tập tin tmux.conf của tôi

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
Một sự thay thế kém cho loglệnh của màn hình , cho phép đăng nhập nhanh chóng. Nhưng sau đó nếu bạn đang ở trong tmux và muốn sử dụng ghi nhật ký màn hình, bạn phải bắt đầu một trình bao mới.
Arcege
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.