Theo dõi thay đổi file trên Linux real-time với inotifywait

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ới
  • modify – Nội dung bị thay đổi
  • delete – Bị xóa
  • move – 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

  • inotify là 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_watches

    Và 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
  • inotify chỉ hoạt động trên filesystem local (không dùng được với NFS).

  • inotifywait khô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é.

Thông tin nổi bật

Báo cáo quan trọng

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận