Giám sát thư mục và chờ đợi sự kiện

Dropbox có cơ chế giám sát thư mục Dropbox sao cho có thể phát hiện mọi thay đổi xảy ra ở thư mục này. Một số ứng dụng khác nhận biết các thay đổi này bằng cách định kỳ quét qua thư mục và đối chiếu với bản sao lưu. Rõ ràng cơ chế giám sát thư mục tiện lợi và ít tốn tài nguyên hơn.

Trên RPi cần phải cài gói inotify-tools để có thể giám sát thư mục bằng inotifywait

apt-get install inotify-tools

Thí dụ

1. Treo ứng dụng cho đến khi file abc.txt được tạo ra trong thư mục /tmp

grep -q abc.txt <(inotifywait -e create -m /tmp)

2. Chuyển file sang thư mục khác, ngay khi nó xuất hiện trong thư mục Dropbox

cd ~/Dropbox/myfolder
inotifywait -m -q -e CREATE --format %f . | while IFS= read -r file; do
  cp -p "$file" /path/to/other/directory
done

3. Tôi xây dựng hệ thống CCTV như sau:

Các camera gởi videoclipsnapshot về một thư mục con tương ứng của thư mục /mnt/cctv (thí dụ cam_1, cam_2…)

Dùng inotifywait để giám sát thư mục /mnt/cctv, mỗi khi có file mới thì di chuyển sang một thư mục con của box.com (thí dụ cam_1/snapshot.jpg -> cam_1/20150523/snapshot.jpg)

Thư mục box.com được mount bằng davfs nên sau đó file được tự động upload lên box.com.

Việc lưu tạm file ở /mnt/cctv để có thể sắp xếp file theo camera, ngày ghi hình… ở ổ đĩa đám mây box.com và quyết định có báo động hay không khi có file mới

Xem 2 đoạn mã sau

inotifywait -m -r -q -e CREATE --format %w%f /mnt/motion |
while read filename; do
    //xử lý filename
    ...
done

while (true); do
    filename=$(inotifywait -r -q -e CREATE --format %w%f /mnt/motion)
    //xử lý filename
    ...
done

Đoạn mã thứ hai có vẻ dể đọc hơn nhưng có thể bỏ sót các file được tao ra liên tiếp nếu việc xử lý file tốn nhiều thời gian, trong khi đoạn mã thứ nhất lưu tất cả tên file phát sinh sự kiện create và được đọc ra xử lý tất cả lần lượt.

4. Dùng lệnh man inotifywait để xem tài liệu hướng dẫn sử dụng

 

Leave a Comment

Filed under Software

Leave a Reply

Your email address will not be published. Required fields are marked *