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 close_write --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 videoclip và snapshot 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ụ /mnt/cctv/cam_1/snapshot.jpg -> mnt/box.com/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
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
và
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 tạo ra liên tiếp nếu việc xử lý file tốn nhiều thời gian (mà thường camera tạo ra một cặp jpg và avi tại cùng một thời điểm), 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
Nguồn
Giám sát thư mục và chờ đợi sự kiện | My RPi
Bổ sung
Trên RPi 2, nếu dùng motion để ghi hình của 2 IP Camera thì chiếm dụng khoảng 40% CPU, trong đó có 2 nhân chạy gần hết công suất, vì vậy có thể tận dụng khả năng ghi hình của IP Camera, sau đó gởi về RPi qua FTP và Samba, không cần dùng motion.
Đoạn mã trên sẽ lưu trữ hình, phim lên ổ đĩa đám mây mà không cần dùng đầu ghi. Hệ thống chạy tốt với RPi một nhân CPU.