Chắc hẳn ai đã từng làm hệ thống lâu hay trong một hệ thống phức tạp sẽ hiểu không phải lúc nào log, config hay file dữ liệu cũng thay đổi có chủ đích. Sự xuất hiện bất ngờ của một file, hay việc ghi đè một config nào đó, đôi khi chính là tín hiệu cảnh báo đầu tiên cho sự cố. Nhưng làm sao để “nghe ngóng” những thay đổi đó một cách real-time?
Một bài toán nhanh thôi này, những file config ví dụ HAproxy bị thay đổi mà trong team DevOps hỏi nhau “Em sửa file này đúng không?” thật quá mất công mất sức và không có sự đảm bảo về hệ thống. Hay một ví dụ quen thuộc khác là anh em hay có thư mục /data để lưu trữ dữ liệu thì làm sao có thể theo dõi trực tiếp real-time thậm trí gửi thông báo về để nắm bắt rõ tình hình.
Thì lúc này câu trả lời là inotifywait, một phần của bộ công cụ inotify-tools, tôi đã dùng khá lâu và thấy ngon nên chia sẻ cho bạn nào chưa biết nhé. Inotifywait sẽ cho phép giám sát sự kiện file với độ chính xác cấp hệ thống.
Vì sao nên dùng inotifywait?
Đầu tiên thì làm vài lý do để muốn dùng đã nhỉ:
- Không cần polling liên tục (như
while true; do ls; done) - Nhẹ, nhanh, và hoạt động theo event-driven
- Có thể tích hợp vào shell script để trigger hành động tự động
- Phù hợp để giám sát log, thư mục upload, hoặc bất kỳ file quan trọng nào
Cài đặt
Trên Debian/Ubuntu:
sudo apt install inotify-tools
Trên CentOS/RHEL:
sudo yum install inotify-tools
Cú pháp cơ bản
inotifywait [tùy chọn] <đường_dẫn>
Ví dụ đơn giản:
inotifywait /tmp/test.txt
Bạn sẽ thấy:
Setting up watches.
Watches established.
/tmp/test.txt MODIFY
Các sự kiện có thể theo dõi
Một số event phổ biến:
create– Tạo file/thư mục mớimodify– Nội dung bị thay đổidelete– Bị xóamove– Di chuyển (rename)open– Được mởaccess– Được đọc
Bạn có thể chọn nhiều event bằng -e:
inotifywait -e modify,create,delete /tmp
Theo dõi liên tục với -m
Flag -m là “monitor” – cho phép theo dõi mãi mãi thay vì thoát sau 1 event:
inotifywait -m /var/log
Mỗi khi có file log mới được ghi, bạn sẽ thấy dòng thông báo ngay lập tức.
Tích hợp với shell script: ví dụ upload folder
Bạn có thư mục /uploads, và muốn tự động xử lý mỗi khi có file mới? Hãy dùng:
#!/bin/bash
inotifywait -m -e create --format '%f' /uploads | while read FILE
do
echo "New file detected: $FILE"
# Xử lý file: gửi email, trigger build, move file, etc.
done
Thực chiến: phát hiện thay đổi cấu hình NGINX
Muốn biết lúc nào ai đó (hoặc automation nào đó) sửa nginx.conf?
inotifywait -m -e modify /etc/nginx/nginx.conf
Tích hợp thêm gửi cảnh báo:
inotifywait -m -e modify /etc/nginx/nginx.conf | while read event
do
echo "⚠️ NGINX config changed!" | mail -s "Alert" hahieu92xxx@gmail.com
done
Giám sát thư mục có nhiều subdirectory?
Dùng thêm --recursive hoặc -r:
inotifywait -mr /home/project
Lưu ý kỹ thuật
-
inotifylà limit-resource, kernel có giới hạn số lượng “watch” mặc định (\~8192).Bạn có thể kiểm tra:
cat /proc/sys/fs/inotify/max_user_watchesVà tăng lên nếu cần (Thường anh em hiểu biết đều custom hết mà mấy ai để default đâu):
echo 524288 | sudo tee -a /proc/sys/fs/inotify/max_user_watches -
inotifychỉ hoạt động trên filesystem local (không dùng được với NFS). -
inotifywaitkhông cung cấp logic nâng cao như debounce (tránh event trùng lặp), nếu bạn cần thì nên kết hợp với script lọc event.
Khi nào nên dùng inotifywait?
- Theo dõi thư mục chứa ảnh/video upload
- Phát hiện xóa nhầm file
- Phản ứng real-time khi log hệ thống thay đổi
- Tích hợp pipeline DevOps: trigger job build khi có file mới
- Tăng tính bảo mật: cảnh báo khi ai đó sửa file nhạy cảm
Chắc kết thôi
inotifywait tuy đơn giản, nhưng là một công cụ cực kỳ mạnh nếu biết tận dụng. Nó đại diện cho triết lý event-driven monitoring bạn nào chưa biết triết lý này có thể đọc tại đây, thay vì kiểm tra thủ công hay dựa vào cron.
Trong thời đại DevOps và tự động hóa, việc biết một công cụ như inotifywait có thể giúp bạn:
- Phát hiện sự cố sớm hơn
- Giảm độ trễ automation
- Tăng khả năng quan sát hệ thống mà không cần tool phức tạp
Với tôi thì rất hữu ích trong nhiều trường hợp, dĩ nhiên là cũng có nhiều phương pháp khác nhưng áp dụng linh hoạt sẽ tối ưu hơn rồi. Nếu hữu ích thì bạn có thể bookmark lại xem sau hoặc xin chút góp ý để tôi thêm động lực chia sẻ cho anh em những bài viết thực tế hơn nữa nhé.





