Linux Incron 实时文件监控与 Rsync 实时文件同步

By | 最新修改:2025-11-11

前言

本文前面的部分介绍 Linux 实时文件同步的基础 Inotify 的概念,然后介绍基于 Inotify 文件事件的类似于 Cron 的 incron

再就是如何安装和使用 incron,最后结合 incronRsync 举个实时文件同步的例子。

本文要实现的目标

如果读者是 Linux 用户,你是否有把本地文件上传到远程服务器,或者本地复制到本地的需求,有时还要在文件改变时与目标立即进行同步的进一步需求?

如果有,那么就请阅读这篇文章。这篇文章将带你走进如何在 Linux 下进行实时的文件同步。

实时同步与基于时间间隔/定时的同步

一般地,Linux 使用者使用 Cron 按设定的时间进行脚本的定时执行,那些符合定时执行需求的场景中,这种定时执行是好吃的“甜甜圈”,正好方便了人们。

然而,如果你需要实时无差异地进行同步, Cron 就显得有些不够用了。比如在本地电脑上进行代码的开发,然后上传至远程服务器进行执行和调试;在这种情况下,实时更新远程目录就成为了新的需求。

实时的原理

Linux 下的实时文件监视依赖于一种内核子系统,该核心子系统名叫 Inotify

Inotify 基于文件的 inodes,区别文件是否改动,它关注文件 的 inode 的变化。

它不是一个成型的软件,而是一套 API(应用编程接口),它提供函数形式的接口。

应用程序用它来监视目录/文件的更改,被监视的文件一经改动,该 API 便会通知应用程序来做下一步的操作。

如何去处理这种通知,以及如何来做下一步的操作,由应用程序决定,或应用程序作为经纪,并由外部程序,如 Shell 脚本程序进行处理。 incron 就是这样的应用程序。

基于事件触发的 Inotify

Inotify 是在版本号为 2.6.13 的 Linux 内核中集成进去的,自此之后就成为 Linux 内核的一个核心子系统。

Inotify 以事件为触发条件来监控文件系统的改动。

这些事件包括不限于写入、元数据改变、重命名、读取、删除、创建等等。

检查系统内核是否支持 Inotify

  1. 方法一: 终端执行命令 ls /proc/sys/fs/inotify/,如果列出以下文件,则表示系统支持 Inotify:
    max_queued_events  max_user_instances  max_user_watches
    

    以上三个文件决定着系统中 Inotify 能监视文件的最大数目。具体的请关注下未来的文章。

  2. 方法二: 执行命令 grep INOTIFY_USER /boot/config-$(uname -r),如果显示以下的内容,则表示支持 Inotify“:

    CONFIG_INOTIFY_USER=y
    

Incron和Rsync的Logo


incron

incron 是一款行为类似于 Linux 下的计划程序 Cron 的应用程序,称为 “Inotify cron”。

它模仿 Cron 的实现,两者的表操作有极其相似的特点。

不同的是,Cron 基于时间点为触发条件,而 incron 以文件系统事件为触发条件,然后来执行其他应用程序,如 Shell 脚本。

incron 的概念

上文提到, incron 基于 Inotify,其核心以 Inotify 提供的 API 为监控文件系统改动的基础。

除此之外,具体什么是 incron?它有哪些行为?

incron 安装到 Linux 机器后,它就分为两大部分,每个部分各司其职。

其一是 incron 的守护进程 incrondincrond 负责监控文件系统的更改,
以及执行表定义的命令(包括应用程序,如 Shell 脚本或其他)。

其二就是定义和管理 incron 表的 incrontab

经过配置后, incrontab 中的每一行就是 incron 表的规则,表规则中设置有要监控的目录/文件、触发的文件系统事件,以及文件系统事件触发后要执行的应用程序。

至于如何定义表,请继续阅读后面内容。

Linux 安装 incron

Debian 系操作系统

sudo apt update
sudo apt install -y incron

Fedora 系操作系统

# 非 root 用户要添加 sudo
yum install -y incron
# 或
dnf install -y incron

Arch Linux

sudo pacman -S rsync

incrond 命令参数

在前台运行

-n--foreground:在前台运行 incrond

root 用户需要 sudo

这对测试、调试和优化起着重要的作用。

结束正在运行的守护进程实例

-k--kill:终止正在运行的守护进程的实例。

root 用户需要 sudo

指定守护进程配置文件的路径

-f <FILE>--config=<FILE>:指定配置文件的其他路径。

默认的配置文件位于 /etc/incron.conf

更多关于 incrond 的介绍,请阅读文档: man incrond

incron 的两种运行方式——前台运行和守护进程

在前台运行 incrond

只须运行:

# 在非 root 用户下
sudo incrond -n
# 或
sudo incrond --foreground
# 在 root 用户下可不用 sudo

在前台运行的时候,产生的标准错误输出将输出到屏幕上。

想要结束它,可以在其他终端执行 sudo incrond -k,或者直接 Ctrl c

Incron 基于 SystemD 守护进程的启动

后记

本文详述了如何在 Linux 下进行实时的文件同步。在多个章节中,
详细介绍了什么是 Inotifyincronincrondincrontab 和文件事件(掩码)等等实时同步的必要基础知识。

文章的后面还介绍了基于 SSH 的 Rsync 文件传输,
同时也通过 Rsync 示例说明如何在不使用 SSH 默认端口和使用 SSH 密钥的方式登录 SSH 通道来传输文件数据。

在文章的最后,举了个 Rsyncincron 配合的实例来验证文件的实时同步。

由于篇幅原因,还有许多的内容不能全部一一列举出来,还望见谅!

在后续的篇章中,可能还会继续有关于 Rsyncincron 的文章发布出来。

请关注一下网站和微信公众号获取最新文章。


程序知路

鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。

本文章可以转载,但是需要说明来源出处!

本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com