Xoay vòng không gian điều khiển tự do trên linux?


8

Có người chỉ hỏi tôi 'chúng ta nên giữ nhật ký cho ứng dụng của mình trong bao lâu' và câu trả lời của tôi là 'cho đến khi đĩa đầy' vì không có lý do gì để vứt chúng đi ngoài việc hết dung lượng.

Tuy nhiên, logrotate tiêu chuẩn muốn chúng tôi chỉ định một khoảng thời gian cụ thể + số lần quay. Có điều gì tương tự sẽ cho phép chúng ta nói "xoay vòng hàng ngày và giữ bao nhiêu lịch sử như bạn muốn cho đến khi chỉ còn 5% không gian trống"?

Nền tảng là Redhat Linux.


1
Giữ nhật ký cho đến khi đĩa đầy có thể được áp dụng trên môi trường vật lý, nhưng vì chúng ta chủ yếu chuyển sang máy chủ ảo và đám mây, kích thước hệ thống tệp phải càng nhỏ càng tốt để giảm chi phí. Trong trường hợp này, bạn không thể tránh việc xác định chính sách duy trì.
jfg956

Câu trả lời:


9

Bạn có thể có thể sử dụng các chỉ thị đầu tiên hoặc cuối cùng để gọi một tập lệnh shell kiểm tra dung lượng trống của đĩa, sau đó chạy xóa trên các tệp cũ nhất.

   firstaction/endscript
          The lines between firstaction and endscript (both of which must appear on lines by themselves) are
          executed (using /bin/sh) once before all log files that match the wildcarded pattern are  rotated,
          before  prerotate  script  is  run  and  only if at least one log will actually be rotated.  These
          directives may only appear inside a log file definition. Whole pattern is passed to the script  as
          first  argument.  If  the script exits with error, no further processing is done. See also lastac-
          tion.

Cập nhật:

Đây là một bài đăng Stackoverflow về loại kịch bản bạn có thể chạy:

/programming/7523059/remove-oldest-file-in-reposeective


1

logrotate tự nó không có tùy chọn như vậy. Bạn có thể thêm tập lệnh cron tìm nhật ký cũ nhất để xóa bất cứ khi nào không gian trống nằm dưới tiêu chí của bạn. Bạn có thể làm một số xác nhận khác là tốt. Tuy nhiên, việc nhận đĩa quá đầy mọi lúc không phải là ý hay vì hệ thống sẽ không thể tạo các tệp tạm thời lớn và có thể gây ra lỗi ứng dụng.


Nếu bạn có mọi thứ trên một hệ thống tập tin, nó có thể không phải là một ý tưởng tốt. Tuy nhiên, nhật ký của tôi nằm trên hệ thống tập tin riêng của họ, để tránh cản trở mọi thứ khác.
kdt

ah ok, nếu họ có fs duy nhất của họ, thật đơn giản để có một kịch bản để thực hiện việc dọn dẹp, dh / fs và sử dụng awk hoặc cắt để trích xuất% đã sử dụng, và dựa trên hình đó, bạn có thể bắt đầu tìm kiếm với exec rm tôi thường không viết một kịch bản và chỉ đặt một lớp lót trong chính crontab.
johnshen64

0

Tôi chỉ muốn chỉ ra rằng có những trường hợp bạn không muốn nhật ký của mình lấp đầy tất cả dung lượng đĩa trống. Tôi đã xử lý một số máy chủ lưu trữ với các thư mục được cung cấp / var mỏng và việc giữ các bản ghi ở một kích thước nhất định là rất quan trọng. Chúng tôi đã sử dụng một công việc bạn thân kết hợp với logrorate để giảm kích thước. Một cái gì đó tương tự có thể được sử dụng trong môi trường của bạn, mặc dù một máy chủ nhật ký trung tâm như splunk hoặc syslog-ng có thể là một lựa chọn tốt hơn.


0

Như @cjc đã đề xuất, bạn có thể sử dụng lần đầu tiên. Xem ví dụ này:

/mnt/user/logs/*.log  /mnt/user/logs/*/*.log {
        daily
        missingok
        rotate 7
        compress
        delaycompress
        notifempty
        su root www-data
        create 760 root www-data
        firstaction
          for file in `find  -type f -size +1024M`; do
              percent=`df -h | grep /mnt/user | awk '{print $5}' | sed 's/%//'`
              if [ $percent -gt 50 ]; then 
                  echo "Removed $file" >> /mnt/user/logs/logrotate.log
                  rm $file
              fi
           done;
        endscript
}

Trong ví dụ này, bạn đã xóa các tệp lớn hơn 1GB khỏi phân vùng / mnt / user nếu phân vùng sử dụng không gian lớn hơn 50% .

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.