温馨提示×

Ubuntu inotify设置步骤是什么

小樊
41
2025-12-20 15:29:24
栏目: 智能运维

Ubuntu 上配置 inotify 的实用步骤

一 安装与准备

  • inotify 是 Linux 内核提供的文件系统事件机制,用户态通常通过 inotify-tools 使用。先安装工具包并确认内核支持:
    • 安装:sudo apt update && sudo apt install -y inotify-tools
    • 内核支持检查:uname -a(需 2.6.13 及以上),或检查头文件:ls /usr/include/sys/inotify.h

二 常用监控命令

  • 监控目录(递归)并输出事件与文件:inotifywait -m -r -e create,modify,delete,move --format '%w%f %e' /path/to/dir
  • 仅监控单个文件的关键事件:inotifywait -m -e modify,close_write,attrib /path/to/file
  • 统计类监控(60 秒汇总):inotifywatch -r -t 60 /path/to/dir
  • 常用参数说明:
    • -m 持续监控;-r 递归子目录;-e 指定事件;--format 自定义输出;--timefmt 时间格式
    • 事件关键词:create、delete、modify、attrib、move、moved_to、moved_from、close_write、close_nowrite、open

三 编写自动化脚本

  • 示例:监控目录并将事件写入日志
    • 脚本 /usr/local/bin/inotify-monitor.sh
      #!/usr/bin/env bash
      MON_DIR="/path/to/dir"
      LOG="/var/log/inotify.log"
      
      inotifywait -m -r -e create,modify,delete,move --format '%T %w%f %e' "$MON_DIR" | \
        while IFS= read -r line; do
          echo "$line" | tee -a "$LOG"
          # 在此处添加你的业务动作,例如同步、通知等
        done
      
    • 赋权并试运行:chmod +x /usr/local/bin/inotify-monitor.sh && /usr/local/bin/inotify-monitor.sh

四 作为系统服务运行

  • 创建 systemd 服务:sudo nano /etc/systemd/system/inotify-monitor.service
    [Unit]
    Description=Inotify File Monitor
    After=network.target
    
    [Service]
    Type=simple
    ExecStart=/usr/local/bin/inotify-monitor.sh
    Restart=always
    User=your_username
    StandardOutput=journal
    StandardError=journal
    
    [Install]
    WantedBy=multi-user.target
    
  • 启用与启动:
    • sudo systemctl daemon-reload
    • sudo systemctl enable --now inotify-monitor.service
    • 查看状态:sudo systemctl status inotify-monitor.service

五 调整内核参数与故障排查

  • 查看当前 inotify 参数:cat /proc/sys/fs/inotify/max_user_watches
  • 临时提高限制(立即生效):sudo sysctl -w fs.inotify.max_user_watches=524288
  • 永久生效:编辑 /etc/sysctl.conf 或新建 /etc/sysctl.d/99-inotify.conf,加入
    • fs.inotify.max_user_watches=524288
    • 可按需调整:fs.inotify.max_user_instancesfs.inotify.max_queued_events
    • 应用:sudo sysctl -p
  • 常见报错与处理:
    • “Failed to allocate directory watch: Too many open files”:提高 max_user_watchesmax_user_instances,如
      • fs.inotify.max_user_instances=512
      • fs.inotify.max_user_watches=262144
    • 编译安装 inotify-tools 后出现 “inotifywait: error while loading shared libraries”:将库链接到系统库目录,例如
      • sudo ln -sv /usr/local/lib/libinotify* /usr/lib/
      • 必要时 sudo ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0

0