Thay thế cho đuôi đuôi -f mà đi theo tên tệp


59

Tôi có một số nhật ký được tạo bằng cách sử dụng bộ ghi tệp xoay theo thời gian. Điều này đăng nhập vào một tập tin được gọi tool.log, và vào nửa đêm, di chuyển cái này đến tool.log.<date>và bắt đầu một cái mới tool.log.

Tôi có một tail -f tool.logmáy chạy để theo dõi nhật ký, nhưng vào nửa đêm, khi tool.logđược đổi tên thành tool.log.<date>, tailtiếp tục xem tệp đã đổi tên.

Điều tôi hy vọng là một công cụ tương tự tail, nhưng sẽ tiếp tục theo dõi tệp có tên tool.log, thay vì đi theo nút.

Có một cái gì đó như thế này tồn tại? Nếu không, tôi có thể tự viết bằng Python cho mục đích này.

Câu trả lời:


90

Một số triển khai tailcó một tùy chọn cho việc này; đây là phần mô tả từ trang man cho đuôi GNU:

-F
giống như --follow=name --retry

-f, --follow[ ={ tên | mô tả }]
đầu ra nối thêm dữ liệu khi tệp phát triển; -f, --follow--follow=descriptortương đương

--retry
tiếp tục cố gắng mở một tập tin ngay cả khi nó hoặc không thể truy cập được; hữu ích khi theo tên, nghĩa là với--follow=name

Vì tùy chọn này không được chỉ định bởi POSIX, bạn không thể phụ thuộc vào nó ở mọi nơi. Một số triển khai đã biết:

  • GNU - đã-Fđược mô tả ở trên
  • Mac OS X , FreeBSD NetBSD - có một-Ftùy chọntương tựcó cùng hiệu ứng
  • OpenBSD --flà đủ (nếu tệp được thay thế (nghĩa là số inode thay đổi), đuôi sẽ mở lại tệp và tiếp tục)
  • Solaris - không tương đương
  • Busybox --Fcó sẵn trong các phiên bản gần đây, nhưng phải được biên dịch bằngENABLE_FEATURE_FANCY_TAIL(theo mặc định nó không được biên dịch)

55

Thay thế là tail -Fmệnh lệnh.

Các -Ftùy chọn có nghĩa --follow=namevới --retrylựa chọn, vì vậy đuôi đang theo dõi tập tin của bạn ngay cả khi nó đã bị xóa và tạo lại.


5

Vì bạn đã yêu cầu thay thế :

Các lesstiện ích có thể là một thay thế cho tail -F.

Nó sẽ phải được chạy như sau: less --follow-name filename.logvà nhấn Shift+ F.

Điều này sẽ cho bạn kết quả tương tự như tail -F.


Cảm ơn. Tôi chỉ sau một sự thay thế bởi vì tôi không biết về đuôi -F. Luôn luôn tốt để biết các tùy chọn mặc dù.
Hugh

4

Một cách khác là sử dụng watchlệnh, lệnh này sẽ lặp lại bất kỳ lệnh nào sau mỗi n giây, cứ sau 2 giây trong ví dụ này:

watch -n2 "tail tool.log"

Sử dụng Ctrl+ Cđể thoát lệnh khi bạn xem xong nhật ký.


1
Điều này có vẻ như nó sẽ tạo ra rất nhiều thông điệp trùng lặp nếu nhật ký cuộn chậm hơn so với bộ đếm thời gian làm mới và sẽ bỏ lỡ một số tin nhắn nếu nó cuộn nhanh hơn.
Bobson

3
Đồng hồ chiếm toàn bộ màn hình, do đó, nó sẽ không trùng lặp tin nhắn, nhưng nó sẽ loại bỏ khả năng cuộn lại.
Hugh

3

lnav là một công cụ tuyệt vời khác theo tên tệp.

Bạn cũng có thể trỏ nó vào một thư mục và nó sẽ theo đuôi tất cả các tệp trong thư mục đó, ngoài tất cả các loại tính năng gọn gàng khác.


Tôi đã tìm thấy nó không xử lý cắt ngắn và / hoặc đổi tên các bản ghi được xoay (tôi không chắc cái nào làm đảo lộn nó trong trường hợp cụ thể của tôi) vì vậy các bản ghi dường như dừng lại vào nửa đêm trừ khi tôi khởi động lại lnav. Tôi có thiếu một số công tắc hoặc kỹ thuật rõ ràng cho nó không, tôi tự hỏi vì đây có vẻ như là thứ gì đó nên có trong bước tiến của nó?
Stuart Hickinbottom

Nó phụ thuộc vào cách tập tin bị cắt ngắn. Nếu bạn chuyển -rcờ cho lnav, nó sẽ tải lại tên tệp (và tải bất kỳ nhật ký đã xoay nào trước đó)
Wayne Werner

1

Tôi không chắc multitailsẽ xử lý trường hợp cụ thể của bạn hay không, nhưng tôi cá là vậy. multitail thực hiện khá nhiều thứ bạn có thể muốn taillàm.

https://en.wikipedia.org/wiki/MultiTail


1
Có nó sẽ - multitail -f <name1> -f <name2> -f <name3> .... Ví dụ này hiển thị theo sau một số tệp, sẽ được hiển thị trong các cửa sổ riêng biệt.
Stuart Hickinbottom
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.