Cảnh tượng quen thuộc: 2 giờ sáng và cái log “chết tiệt”
Chắc anh em không lạ gì cảnh ngồi ôm màn hình terminal lúc nửa đêm. Server bỗng giở chứng, file config bị ghi đè không rõ lý do, hoặc bạn đang mòn mỏi đợi một tiến trình upload hoàn tất để chạy script xử lý. Thay vì gõ ls -l liên tục hay viết vòng lặp while true; sleep 1 vừa ngốn tài nguyên vừa kém hiệu quả, chúng ta có cách chuyên nghiệp hơn nhiều.
Hồi mới vào nghề, mình từng mất cả buổi chiều chỉ để debug một lỗi do không biết file bị sửa lúc nào. Sau đó mình tìm ra inotifywait thuộc bộ inotify-tools. Công cụ này hoạt động như một camera an ninh gắn sâu vào nhân Linux (Kernel). Nó sẽ báo động ngay lập tức khi có bất kỳ ai “chạm” vào file hoặc thư mục bạn chỉ định.
Cài đặt nhanh trong 2 phút
Để bắt đầu, bạn cần cài gói inotify-tools từ kho ứng dụng của distro đang dùng.
# Ubuntu/Debian
sudo apt update && sudo apt install inotify-tools -y
# CentOS/RHEL/Fedora
sudo yum install epel-release -y
sudo yum install inotify-tools -y
Thử nghiệm ngay bằng cách mở hai cửa sổ Terminal. Ở cửa sổ thứ nhất, bạn hãy ra lệnh giám sát thư mục /tmp:
inotifywait -m /tmp
Tại cửa sổ thứ hai, hãy tạo một file bất kỳ:
touch /tmp/test_itfromzero
Ngay lập tức, cửa sổ thứ nhất sẽ nhảy log chi tiết các sự kiện CREATE, OPEN, và CLOSE_WRITE. Vậy là bạn đã làm chủ được dòng chảy dữ liệu trên hệ thống.
Các tham số giúp bạn lọc “nhiễu”
Dùng inotifywait mà không có flag phù hợp thì log sẽ rất rác. Dưới đây là những tham số mình luôn ưu tiên khi setup cho hệ thống production:
-m(monitor): Chế độ theo dõi liên tục, không tự thoát sau sự kiện đầu tiên.-r(recursive): Giám sát cả thư mục con, cực kỳ cần thiết cho các project web.-q(quiet): Lược bỏ các thông báo rườm rà của hệ thống, chỉ tập trung vào sự kiện file.-e(event): Chỉ định chính xác loại sự kiện bạn quan tâm.
5 sự kiện (Events) đáng chú ý nhất:
modify: Nội dung file bị thay đổi.create: Có file hoặc thư mục mới xuất hiện.delete: Ai đó vừa xóa mất dữ liệu.attrib: Metadata hoặc quyền truy cập (permission) bị thay đổi.close_write: File đã ghi xong và đóng lại (an toàn nhất để xử lý tiếp).
Tự động hóa với Scripting: Case study thực tế
Điểm ăn tiền của inotifywait là khả năng kết hợp với Bash script. Mình từng áp dụng nó để tự động reload Nginx mỗi khi chứng chỉ SSL từ Let’s Encrypt được gia hạn thành công. Dưới đây là khung script mẫu bạn có thể dùng ngay:
#!/bin/bash
TARGET="/var/www/html/uploads"
inotifywait -m -r -e close_write --format '%w%f' "$TARGET" | while read FILE
do
echo "Phát hiện file mới: $FILE"
# Logic xử lý: Ví dụ nén ảnh tự động
if [[ "$FILE" == *.jpg ]] || [[ "$FILE" == *.png ]]; then
echo "Đang tối ưu hóa dung lượng..."
# logic nén ảnh ở đây
fi
done
Lưu ý quan trọng: Luôn dùng close_write thay vì create. Nếu dùng create, script sẽ chạy ngay khi file vừa được khởi tạo nhưng chưa có dữ liệu bên trong. Kết quả là script của bạn sẽ xử lý một file rỗng và báo lỗi liên tục.
Những “cú lừa” cần tránh
1. Giới hạn max_user_watches
Mặc định Linux thường chỉ cho phép theo dõi khoảng 8.192 thư mục. Nếu bạn giám sát thư mục lớn như node_modules, lỗi “Upper limit reached” sẽ xuất hiện ngay.
Hãy tăng con số này lên 512k để thoải mái sử dụng:
# Kiểm tra con số hiện tại
cat /proc/sys/fs/inotify/max_user_watches
# Tăng giới hạn tạm thời
sudo sysctl fs.inotify.max_user_watches=524288
# Lưu vĩnh viễn sau khi reboot
echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.conf
2. Vòng lặp vô tận (Infinite Loops)
Sai lầm phổ biến nhất là: script thấy file thay đổi -> script vào sửa file đó -> inotifywait lại báo thay đổi. Vòng lặp này sẽ ngốn sạch CPU server trong vài giây. Hãy dùng --exclude để loại trừ các file tạm hoặc log mà chính script sinh ra.
3. Đừng quá lạm dụng
Mặc dù inotify rất nhẹ, nhưng việc giám sát toàn bộ ổ cứng / một cách đệ quy là hành động “tự sát”. Hãy chỉ tập trung vào các thư mục chứa dữ liệu quan trọng hoặc file cấu hình.
Lời kết cho anh em vận hành
inotifywait không đơn thuần là một câu lệnh, nó giúp bạn thay đổi tư duy sang hệ thống phản ứng (reactive). Thay vì bắt server quét file liên tục một cách mù quáng, hãy để nó tự lên tiếng khi có biến động. Công cụ này sẽ giúp bạn ngủ ngon hơn, vì bạn biết chắc rằng mọi thay đổi đều đang trong tầm kiểm soát.

