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
```。