`tail -f` đôi khi dừng cập nhật - và tệp chưa được di chuyển


10

Gần đây tôi đã nhận thấy rằng đôi khi tail -f <logfile>sẽ ngừng cập nhật lên màn hình.

Làm một Ctrl>- Cvà khởi động lại tailcông việc tốt, mặc dù. Và tôi đã kiểm tra để đảm bảo logfile không bị xoay vòng giữa dòng (điều này có thể làm tailmất trí).

Điều gì sẽ gây ra điều này? Tôi đang chạy RHEL 5.2 x64.


Điều này xảy ra trên tất cả các logfiles, hoặc chỉ một số nhất định? Logfile trên hệ thống tập tin nào? Ứng dụng nào đang viết logfile? Bạn đã hẹn giờ thất bại để xem nếu nó xảy ra (1) một khoảng thời gian nhất định sau khi bạn bắt đầu lệnh đuôi; hoặc (2) tại các khoảng thời gian cố định nhất định (ví dụ: luôn luôn ở: 00: 10: 20: 30: 40 và: 50 sau giờ)?
daveadams

@daveadams - cho đến nay tôi đã nhận thấy, nó chỉ có trên hai (một trên hai máy chủ): trong trường hợp này, logfile logfile cho BSAE (công cụ báo cáo) trên máy chủ HPSA Core (tự động hóa trung tâm dữ liệu) và server.log cho BSAE trên máy chủ báo cáo
warren

1
như một bên, đuôi -F sẽ tiếp tục hoạt động ngay cả khi tệp bị xóa và sau đó được thay thế hoàn toàn bằng một tệp khác.
Sirex

Câu trả lời:


6

Hãy thử gói lệnh đuôi của bạn với stracenếu bạn có nó:

strace -Tt -o /tmp/tail.trace tail -f /var/log/messages

Sau đó, chỉ với những cú đá đệ quy điên rồ, bạn có thể điều chỉnh đầu ra strace (không thành vấn đề nếu điều đó bị phá vỡ vì nó đi ra một tệp):

 tail -f /tmp/tail.trace

Của tôi trông giống như:

8:39:00 write(1, "ng SMAC\n", 8)       = 8 <0.000026>
18:39:00 read(3, "", 0)                 = 0 <0.000019>
18:39:00 fstat64(3, {st_mode=S_IFREG|0640, st_size=92990, ...}) = 0 <0.000019>
18:39:00 fstatfs64(3, 84, {f_type="EXT2_SUPER_MAGIC", f_bsize=4096, f_blocks=4807069, f_bfree=1924458, f_bavail=1680271, f_files=1221600, f_ffree=820806, f_fsid={-1331083162, -1313908385}, f_namelen=255, f_frsize=4096}) = 0 <0.000021>
18:39:00 inotify_init()                 = 4 <0.000033>
18:39:00 inotify_add_watch(4, "/var/log/messages", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1 <0.000041>
18:39:00 fstat64(3, {st_mode=S_IFREG|0640, st_size=92990, ...}) = 0 <0.000019>
18:39:00 read(4,

-T chuyển đổi thời gian và -T chuyển đổi thời gian dành cho các cuộc gọi.

Nhấn return 4 hoặc 5 lần để tạo một chút không gian theo chiều dọc, sau đó đợi cho nó dừng đuôi. Hy vọng sẽ có một số manh mối trong đầu ra.


9

Hãy thử sử dụng:

tail --follow=name <logfile>

Và xem nếu điều đó làm việc tốt hơn. Bạn không phải lo lắng về việc nó bị xoay vòng từ bên dưới bạn.


Bất kỳ mô hình để nó dừng lại? Thời gian nhất định? Thời gian nào đó trong ngày?


tập tin không bị xoay ra từ bên dưới tail- nó chỉ định kỳ (đôi khi từ 2 đến 20 giờ) dừng theo dõi nữa .. ước gì có thêm một mô hình: - \
warren

Nếu bạn nhấn các phím khác trên bàn phím (trừ ctrl-c) thì có tốt hơn không? Khi nó dừng lại, bạn có thể thử gắn vào nó bằng strace / ltrace / etc. để xem nếu nó làm bất cứ điều gì.
MikeyB

suy nghĩ tốt về bước đi - không nhập hoặc các phím khác không có bất cứ điều gì xảy ra; Đôi khi tôi muốn để một cái đuôi chạy trong một screenphiên để gỡ lỗi kéo dài và điều này thật đáng lo ngại
warren

1
Có lẽ không phải vấn đề của bạn, nhưng đảm bảo bạn không vô tình để cửa sổ màn hình mở ở chế độ sao chép khi chạy đuôi. Chế độ sao chép sẽ tạo khối đầu ra lệnh cuối cùng (khi bộ đệm đầy lên).
MikeyB

Câu trả lời tuyệt vời. Tất nhiên các tập tin của tôi đã được quay ra ở đầu mỗi giờ!
alex

4

Cho rằng cả hai logfile có vấn đề đều được viết bởi các thành phần khác nhau của cùng một ứng dụng, tôi tự hỏi liệu đó có phải là một phần của mã đăng nhập cho ứng dụng đó gây ra sự cố không. Tôi đề xuất hai bài kiểm tra để hiểu rõ hơn về những gì đang diễn ra:

  • Lưu ý inode của logfile ( ls -i logfile) trước khi bắt đầu đuôi và một khi đuôi bị lỗi, hãy kiểm tra lại. Nếu inode đã thay đổi, thì logger đang viết lại toàn bộ logfile, điều này sẽ phá vỡ kết nối của đuôi.

  • Lưu ý dòng cuối cùng trước khi đuôi ngừng hoạt động, sau đó truy cập tệp và tìm mục nhật ký đầu tiên sau dòng đó. Làm điều này 3-5 lần nếu có thể. Nếu đó là một vấn đề với chương trình thực hiện ghi nhật ký, một phần của chương trình đã viết mục nhập nhật ký ngay sau khi bạn thấy ngắt đuôi có khả năng chịu trách nhiệm. Nếu mục nhật ký đó luôn giống nhau hoặc nếu nó đến từ cùng một thành phần của chương trình, bạn có thể có đủ dữ liệu để gửi báo cáo sự cố cho nhà cung cấp ứng dụng.

Chúc may mắn.


3

Có cùng một vấn đề ở đây.

Vấn đề là, tập tin tôi đang xem được gắn từ một máy khác. Thông báo thay đổi không được truyền qua mount.

Giải pháp là sử dụng đuôi trên máy ban đầu.

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.