Linux inotify-tools是什么 如何用Shell脚本实时触发XML上传

来源:站长站作者:深圳SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《Linux inotify-tools是什么 如何用Shell脚本实时触发XML上传》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Linux inotify-tools是什么 如何用Shell脚本实时触发XML上传》有用,将其分享出去将是对创作者最好的鼓励。

Linux inotify-tools是一套基于Linux内核inotify机制开发的用户态工具集,主要用于实时监控文件系统的各类事件,比如文件的创建、修改、删除、移动等,无需轮询目录就能及时获取文件变动信息,资源占用极低,非常适合用来实现文件变动触发的自动化任务。

Linux inotify-tools是什么 如何用Shell脚本实时触发XML上传

inotify-tools核心介绍

工具组成

inotify-tools主要包含两个常用工具:

  • inotifywait:用于等待并监听文件系统事件,支持阻塞式运行,直到捕获到指定事件后输出相关信息,是编写监控脚本的核心工具。
  • inotifywatch:用于统计指定时间段内文件系统事件的发生次数,适合做监控数据统计,日常自动化场景中用得较少。

安装方法

主流Linux发行版都可以直接通过包管理器安装:

# CentOS/RHEL系统
yum install -y inotify-tools

# Ubuntu/Debian系统
apt-get install -y inotify-tools

用Shell脚本实时触发XML上传的实现步骤

需求场景说明

假设我们需要监控/data/xml_input目录,当有新的XML文件创建完成且写入稳定后,自动将该文件上传到远程服务器的指定目录,上传完成后将本地文件移动到/data/xml_backup目录做备份。

前置准备

首先确保本地已经安装inotify-tools,同时远程服务器已经配置好SSH免密登录,避免上传时需要手动输入密码。如果还没配置免密,可以执行以下命令生成密钥并拷贝到远程服务器:

# 生成ssh密钥,一路回车即可
ssh-keygen -t rsa

# 将公钥拷贝到远程服务器,替换remote_user和remote_ip为实际值
ssh-copy-id remote_user@remote_ip

完整Shell脚本实现

以下是完整的监控上传脚本,我们监听目录的创建事件,同时增加文件稳定判断逻辑,避免文件还在写入时就触发上传:

#!/bin/bash

# 监控的目录,XML文件会放到这个目录
WATCH_DIR="/data/xml_input"
# 备份目录,上传成功后移动文件到这里
BACKUP_DIR="/data/xml_backup"
# 远程服务器信息,替换为实际值
REMOTE_USER="remote_user"
REMOTE_IP="remote_ip"
REMOTE_DIR="/data/remote_xml"
# 文件稳定等待时间,单位秒,根据XML文件大小调整
STABLE_WAIT=2

# 确保备份目录存在
mkdir -p ${BACKUP_DIR}

# 启动inotifywait监听,监听创建事件,递归监听子目录,输出事件信息
inotifywait -m -r -e create --format '%w%f' "${WATCH_DIR}" | while read FILE
do
    # 只处理.xml后缀的文件
    if [[ "${FILE}" == *.xml ]]; then
        echo "检测到XML文件: ${FILE}"
        # 等待文件写入稳定,循环检查文件大小是否不再变化
        FILE_SIZE_OLD=0
        FILE_SIZE_NEW=1
        while [ ${FILE_SIZE_OLD} -ne ${FILE_SIZE_NEW} ]
        do
            sleep ${STABLE_WAIT}
            FILE_SIZE_OLD=$(stat -c %s "${FILE}" 2>/dev/null)
            FILE_SIZE_NEW=$(stat -c %s "${FILE}" 2>/dev/null)
        done
        echo "文件写入稳定,开始上传: ${FILE}"
        # 执行上传操作
        scp "${FILE}" "${REMOTE_USER}@${REMOTE_IP}:${REMOTE_DIR}/"
        # 判断上传是否成功
        if [ $? -eq 0 ]; then
            echo "上传成功,开始备份文件: ${FILE}"
            mv "${FILE}" "${BACKUP_DIR}/"
            echo "备份完成"
        else
            echo "上传失败,请检查远程服务器连接"
        fi
    fi
done

脚本运行与后台守护

给脚本添加执行权限后可以直接运行,如果需要后台持续运行,可以结合nohup或者systemd服务:

# 添加执行权限
chmod +x /opt/xml_monitor.sh

# 后台运行脚本
nohup /opt/xml_monitor.sh > /var/log/xml_monitor.log 2>&1 &

注意事项

  • inotifywait默认有监控文件数量限制,如果监控的目录文件较多,需要调整内核参数fs.inotify.max_user_watches,执行sysctl -w fs.inotify.max_user_watches=524288可以临时调整,永久调整需要写入/etc/sysctl.conf文件。
  • 如果XML文件是其他程序持续写入的,需要根据实际写入速度调整STABLE_WAIT参数,避免文件未写完就触发上传。
  • 生产环境中建议给脚本添加日志切割和异常告警逻辑,方便后续排查问题。

inotify-toolsShell脚本XML上传Linux监控修改时间:2026-07-08 20:03:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。