当前位置:首页 > 服务器技术 > 正文

Linux网络目录监控(手把手教你用 inotify 实现文件实时监控与同步)

在日常运维或开发中,我们经常需要监控某个目录下的文件变化,比如新增、修改或删除操作。特别是在网络环境中,当多个服务器需要保持文件同步时,Linux网络目录监控就显得尤为重要。本教程将从零开始,教你如何使用 inotify 工具实现对目录的实时监控,并配合脚本完成自动同步。

Linux网络目录监控(手把手教你用 inotify 实现文件实时监控与同步)  Linux文件监控 网络目录同步 实时文件监控 第1张

什么是 inotify?

inotify 是 Linux 内核提供的一种文件系统事件监控机制。它允许程序监听指定文件或目录的变化(如创建、修改、删除等),而无需轮询检查。这使得监控效率极高,非常适合用于实时文件监控场景。

第一步:安装 inotify-tools

大多数 Linux 发行版默认未安装 inotify-tools,我们需要手动安装:

Ubuntu/Debian:

sudo apt updatesudo apt install inotify-tools -y

CentOS/RHEL/Fedora:

sudo yum install epel-release -ysudo yum install inotify-tools -y

第二步:基本监控命令演示

假设我们要监控 /var/www/html 目录,可以使用以下命令:

inotifywait -m -r -e create,modify,delete /var/www/html

参数说明:

  • -m:持续监控(不退出)
  • -r:递归监控子目录
  • -e:指定监听的事件类型(create 新建、modify 修改、delete 删除)

第三步:编写自动同步脚本

下面是一个简单的 Bash 脚本,用于监控本地目录并将变化实时同步到远程服务器(需配置 SSH 免密登录):

#!/bin/bashLOCAL_DIR="/var/www/html"REMOTE_USER="user"REMOTE_HOST="192.168.1.100"REMOTE_DIR="/var/www/html"inotifywait -m -r -e create,modify,delete "$LOCAL_DIR" --format '%w%f %e' | while read file eventdo    echo "[$(date)] 文件 $file 发生事件: $event"    rsync -avz --delete "$LOCAL_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/"done

保存为 sync_monitor.sh,并赋予执行权限:

chmod +x sync_monitor.sh./sync_monitor.sh

这样,每当本地目录发生变化,就会自动通过 rsync 同步到远程服务器,实现网络目录同步

注意事项

  • 确保远程服务器已配置好 SSH 免密登录,否则每次同步都会提示输入密码。
  • 如果监控大量文件,注意内核的 inotify 监控上限(可通过 /proc/sys/fs/inotify/max_user_watches 查看和调整)。
  • 生产环境中建议将脚本设置为系统服务或使用 nohup 后台运行。

总结

通过 inotify 和简单的 Bash 脚本,我们可以轻松实现 Linux 下的实时文件监控网络目录同步。这种方法资源占用低、响应快,非常适合用于 Web 服务器集群、日志收集、备份系统等场景。希望这篇教程能帮助你掌握这项实用技能!

关键词:inotify, Linux文件监控, 网络目录同步, 实时文件监控