Inotify是Linux內核子系統,其功能通過用戶空間工具(如inotify-tools
)實現。更新需分別處理內核與工具層:
uname -a
查看當前內核版本,若版本低于2.6.13(不支持inotify),需升級內核。CentOS系統可通過yum update kernel
命令升級內核,升級后重啟系統生效。inotify-tools
是命令行監控工具(包含inotifywait
、inotifywatch
),需定期通過包管理器更新:
yum update inotify-tools
;yum install epel-release
),再執行更新。Inotify的性能與穩定性依賴內核參數配置,需定期檢查并調整以下參數(位于/etc/sysctl.conf
):
fs.inotify.max_user_watches
:單個用戶可監控的文件/目錄數量,默認值(約8192)較小。若監控大量文件(如web目錄),需調大至524288
或更高(根據實際需求計算:find /監控目錄 -type f | wc -l
+ 余量)。fs.inotify.max_user_instances
:單個用戶可創建的inotify實例數量,默認128。若運行多個監控腳本,需調大至1024
或更高。fs.inotify.max_queued_events
:內核事件隊列長度,默認16384。若事件產生過快(如大量文件修改),需調大至99999999
以避免“Event Queue Overflow”錯誤。調整后,運行sysctl -p
使配置生效。
inotifywait
編寫監控腳本(如同步文件),需確保:
-m
(持續監控)而非單次觸發;--exclude
或--exclude-dir
排除無需監控的目錄(如cache
、tmp
),減少無效事件;>> /tmp/inotify.log
),便于故障排查。#!/bin/bash
inotifywait -mrq --exclude 'cache|tmp' -e modify,create,delete /data/web | while read path action file; do
echo "$(date '+%Y-%m-%d %H:%M:%S') $path $action $file" >> /tmp/inotify.log
rsync -avz /data/web/ user@backup-server:/data/web/
done
/etc/rc.d/rc.local
(需賦予執行權限chmod +x /etc/rc.d/rc.local
),確保系統重啟后自動啟動。/data/web
而非/
);-e modify,create
替代-e all
,降低內核負載;&
后臺運行多個inotifywait
實例,或用Python的concurrent.futures
模塊實現多線程處理。sysctl -a | grep inotify
確認內核參數是否合理;/tmp/inotify.log
或系統日志(journalctl -xe
),定位“Event Queue Overflow”“Permission Denied”等錯誤;top
、htop
檢查CPU、內存使用情況,避免資源耗盡導致監控失效;df -T
查看文件系統類型)。chmod
限制腳本權限(如chmod 700 /home/user/inotify_script.sh
),避免未授權訪問。setsebool -P allow_user_inotify 1
),允許用戶進程使用inotify功能。firewalld
限制訪問IP:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="8080" protocol="tcp" accept'
firewall-cmd --reload
```。