Xoay một tệp đang mở và được viết mọi lúc


10

Tôi có một ứng dụng linux liên tục ghi thông tin đăng nhập vào một tệp nhật ký, vd. /var/log/application.log. Vì ứng dụng không tự động xoay tệp, tệp nhật ký này có thể đạt kích thước gigabyte trong một số tuần, vì vậy tôi muốn có thể xoay tệp này đúng cách

Mối quan tâm chính của tôi ở đây là để xoay một tệp được mở bởi ứng dụng mọi lúc, tôi có thể sẽ cần phải:

  1. Di chuyển tệp đến dạng xoay của nó /var/log/application.log -> /var/log/application.log.2013-01-28

  2. Tạo một sản phẩm nào /var/log/application.log. Quan sát: Tại thời điểm này, quy trình đăng ký vẫn đang viết/var/log/application.log.2013-01-28

  3. Thay đổi bộ mô tả tệp của quy trình ứng dụng để quay lại lần nữa /var/log/application.log

Vì vậy, tôi có đúng không? Nếu vậy, làm thế nào tôi có thể làm điều này? (chủ yếu là thay đổi phần mô tả tập tin)

Nếu tôi không, cách chính xác và làm thế nào để làm điều đó?


Bạn có cần phải xóa tập tin hoặc chỉ xoay nó?
ewwhite

Ứng dụng gì? Ứng dụng phải cung cấp hỗ trợ để làm điều này đúng. (Nếu không, bạn có thể là một điều rất xấu xí - gắn với quá trình này, mở file mới, dup2các mô tả mới hơn một tuổi, sau đó đóng các bộ mô tả mới.)
David Schwartz

Thú vị aproach Schwartz. Tôi tò mò muốn thấy điều đó trong hành động và sẽ chơi với nó một thời gian. Dù sao, ứng dụng này là trong nhà và tôi đang tìm kiếm một giải pháp tổng quát hơn. Tôi thích câu trả lời của kormoc btw
Bruno Polaco

@ewwhite Tôi cần xoay nó, tôi không đủ khả năng để mất dữ liệu nhật ký
Bruno Polaco

Câu trả lời:


11

Viết một logrotatecấu hình để sử dụngcopytruncate

copytruncate
    Truncate the original log file in place after creating a copy, instead of moving the 
    old log file and optionally creating a new one. It can be used when some program
    cannot be told to close its logfile and thus might continue writing (appending) to
    the previous log file forever. Note that there is a very small time slice between
    copying the file and truncating it, so some logging data might be lost. When this
    option is used, the create option will have no effect, as the old log file stays
    in place.

Thật thú vị, việc cắt bớt tệp sau khi sao chép có vẻ khá thông minh, ngay cả với biên độ mất dữ liệu. Tôi không nhận thấy tùy chọn này trên logrotate. Thx cho cái nhìn sâu sắc :)
Bruno Polaco

1

Hầu hết các ứng dụng như vậy phản hồi với một tín hiệu, chẳng hạn như SIGHUP, và sẽ đóng và mở lại các tệp nhật ký của chúng khi nhận được tín hiệu. Kiểm tra tài liệu của ứng dụng của bạn để biết tín hiệu chính xác cần gửi.


Và nếu không, bạn có thể khởi động lại ứng dụng như một dự phòng. Đó là những gì syslog thường làm, và khá nhiều chương trình khác.
lsd
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.