Tự động phát hiện khi tệp đã đạt đến giới hạn kích thước


7

Tôi muốn gửi email khi một tệp đạt đến giới hạn kích thước nhất định.

Cách duy nhất tôi nghĩ để làm điều này là bằng cách thực hiện một cronjob sẽ kiểm tra kích thước tệp và gửi email nếu tệp lớn hơn kích thước mong muốn.

Tuy nhiên, nó có vẻ là một giải pháp tồi cho tôi để thêm một cronjob sẽ kiểm tra, ví dụ cứ sau 15-30 phút, kích thước của một tệp?

Tôi đã tự hỏi nếu có một cách tốt hơn để làm điều này để tự động phát hiện khi tập tin được thêm vào một số văn bản (sự kiện?) Để tôi có thể kiểm tra kích thước và thực hiện điều trị mong muốn.


1
inotifylà một cái gì đó mà bạn nên tìm ra.
Ramesh

1
xem superuser.com/questions/181517/, bạn có thể thêm kiểm tra kích thước tệp sau này.
harish.venkat

Câu trả lời:


8

Tôi có thể hình dung ra 2 cách tiếp cận để làm điều này. Bạn có thể sử dụng một vòng lặp while sẽ chạy lệnh "stat" ở một số tần số đã đặt, thực hiện kiểm tra để xem kích thước của tệp có vượt quá kích thước mong muốn của bạn không. Nếu có, sau đó gửi email. Phương pháp này ổn nhưng có thể hơi kém hiệu quả vì nó sẽ chạy lệnh "stat" bất kể có sự kiện nào trên tệp hay không, ở tần số thời gian đã đặt.

Phương pháp khác sẽ liên quan đến việc sử dụng các sự kiện hệ thống tệp mà bạn có thể đăng ký người theo dõi để sử dụng lệnh inotifywatch.

Phương pháp # 1 - Cứ sau X giây

Nếu bạn đặt đoạn mã sau vào tập lệnh, hãy nói notify.bash:

#!/bin/bash

file="afile"
maxsize=100    # 100 kilobytes

while true; do
    actualsize=$(du -k "$file" | cut -f1)
    if [ $actualsize -ge $maxsize ]; then
        echo size is over $maxsize kilobytes
        .... send email ....
        exit
    else
        echo size is under $maxsize kilobytes
    fi

    sleep 1800 # in seconds = 30 minutes
done

Sau đó chạy nó, nó sẽ báo cáo về mọi quyền truy cập vào tệp, nếu truy cập đó dẫn đến kích thước của tệp vượt quá kích thước tối thiểu của bạn, nó sẽ kích hoạt một email được gửi và thoát. Nếu không, nó sẽ báo cáo kích thước hiện tại và tiếp tục xem tập tin.

Phương pháp # 2 - Chỉ kiểm tra ví dụ truy cập

Phương pháp hiệu quả hơn là chỉ kiểm tra tệp khi có quyền truy cập thực tế. Các loại quyền truy cập có thể khác nhau, ví dụ này tôi đang minh họa cách xem chỉ truy cập tệp, nhưng bạn chỉ có thể xem các sự kiện khác, chẳng hạn như tệp bị đóng. Một lần nữa chúng tôi sẽ đặt tên cho tệp này , notify.bash:

#!/bin/bash

file=afile
maxsize=100 # 100 kilobytes

while inotifywait -e access "$file"; do
    actualsize=$(du -k "$file" | cut -f1)
    if [ $actualsize -ge $maxsize ]; then
        echo size is over $maxsize kilobytes
        .... send email ....
        exit    
    else
        echo size is under $maxsize kilobytes
    fi
done

Chạy tập lệnh này sẽ dẫn đến kết quả đầu ra sau:

$ ./notify.bash 
Setting up watches.
Watches established.

Tạo một số hoạt động trên tệp, tệp hiện báo cáo kích thước của nó như sau:

$ seq 100000 > afile
$ du -k afile 
576 afile

Đầu ra của tập lệnh thông báo của chúng tôi:

afile ACCESS 
size is over 100 kilobytes

Tại điểm đó nó sẽ thoát.

Gửi email

Để thực hiện hoạt động này, bạn chỉ cần làm một cái gì đó như thế này trong tập lệnh:

subject="size exceeded on file $file"
emailAddr="user@somedom.com"
mailCmd="mail -s \"$subject\" \"$emailAddrs\""
( echo ""; echo "DATE: $(date)"; ) | eval mail -s "$subject" \"$emailAddr\"

Cân nhắc

Phương pháp thứ hai vì nó sẽ hoạt động trong hầu hết các tình huống. Một trong những điều đó sẽ không xảy ra nếu tệp đã vượt quá $maxsizekhi tập lệnh được gọi và không có sự kiện nào nữa trên tệp loại access. Điều này có thể được khắc phục bằng một kiểm tra bổ sung được thực hiện trong tập lệnh khi nó được gọi hoặc bằng cách mở rộng các sự kiện diễn ra inotifywatch.

Người giới thiệ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.