Linux incrond初始化监视器目录以进行更改并采取措施

时间:2020-01-09 10:41:39  来源:igfitidea点击:

每当要在Linux操作系统下的/var/www/html/upload /目录中上载或删除文件时,我都想复制(rsync到远程服务器)目录树,以用于备份和/或负载平衡,而无需进行复杂的文件共享设置例如NFS或GFS或iSCSI存储。
如何监视/var/www/html/upload /及其子目录中的新文件,并执行rsync命令将其复制回www2.example.com:/var/www/html/upload/?

inotify是基于inode的文件系统通知技术。
它提供了监视文件系统中文件各种事件的可能性。
它是(过时)dnotify的非常好替代。

inotify带来了一种轻松的方式来管理应用程序中使用的文件。

incrond(inotify cron守护程序)是一个守护程序,它监视文件系统事件(例如添加新文件,删除文件等)并执行命令或Shell脚本。
它的用法通常类似于Linux或Unix cron作业。
在本教程中我们学习了如何在两个Web服务器节点之间设置incrond和同步文件。

如何安装incrond

在RHEL/Fedora/CentOS Linux下执行以下dnf命令/yum命令:

$ sudo yum install incron

在Debian/Ubuntu Linux下输入apt命令/apt-get命令:

$ sudo apt-get install incron

配置文件

  • /etc/incron.conf主要的incron配置文件
  • /etc/incron.d/incrond会检查此目录中的系统表文件。您应该根据目录或域名将所有配置文件放在此处。
  • /etc/incron.allow此文件包含允许使用incron的用户。
  • /etc/incron.deny此文件包含拒绝使用incron的用户。
  • /var/spool/incron incrond会检查此目录中是否有用户表文件,这些文件是由运行incrontab命令的用户设置的。

Incron语法

语法如下:

<directory> <file change mask> <command or action>  options
/var/www/html IN_CREATE /root/scripts/backup.sh
/sales IN_DELETE /root/scripts/sync.sh
/var/named/chroot/var/master IN_CREATE,IN_ATTRIB,IN_MODIFY /sbin/rndc reload

其中:

  • <directory>它不过是路径,它是绝对文件系统路径,例如/home/data。对此路径所做的任何更改都会导致命令或操作。
  • <file change mask>掩码不过是各种文件系统事件,例如删除文件。每个事件都可以导致命令执行。使用以下面具:
  • IN_ACCESS文件已被访问(读取)
  • IN_ATTRIB元数据已更改(权限,时间戳,扩展属性等)
  • IN_CLOSE_WRITE已打开用于写入的文件已关闭
  • IN_CLOSE_NOWRITE未打开用于写入的文件已关闭
  • IN_CREATE在监视目录中创建的文件/目录
  • IN_DELETE文件/目录已从监视目录中删除
  • IN_DELETE_SELF观看的文件/目录本身已被删除
  • IN_MODIFY文件已被修改
  • IN_MOVE_SELF观看文件/目录本身已移动
  • IN_MOVED_FROM文件已移出监视目录
  • IN_MOVED_TO文件已移入监视目录
  • IN_OPEN文件已打开
  • " IN_ALL_EVENTS"符号被定义为上述所有事件的位掩码。
  • <命令或操作>在给定目录上匹配掩码时运行命令或脚本。
  • options可以是命令的以下任意一项(即,您可以将它作为arg传递给命令):
  • $$美元符号
  • $@监视文件系统路径(见上文)
  • 与事件相关的$#文件名
  • $%事件标志(按文本)
  • $&事件标志(按数字)

开启服务

在CentOS/RHEL上输入以下命令:

# service incrond start
# chkconfig incrond on
###################################################
### systemd based Linux distro such as CentOS/RHEL 7.x/8.x, try ##
###################################################
# systemctl enable incrond.service
# systemctl start incrond.service

Linux incrond inotify监视器目录以进行更改并采取措施

执行以下命令以编辑您的incrontab

incrontab -e

在/tmp目录中创建或删除文件时,运行logger命令:

/tmp IN_ALL_EVENTS logger "/tmp action for $# file"

保存并关闭文件。
现在cd到/tmp并创建一个文件:

$ cd /tmp
$ >foo
$ rm foo

要查看消息,请执行:

$ sudo tail -f /var/log/messages

输出示例:

Jul 17 18:39:25 Hyman-desktop logger: "/tmp action for foo file"

如何运行Rsync命令为/var/www/html/upload目录复制文件?

执行以下命令:

# incrontab -e

追加以下命令:

/var/www/html/upload/ IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync --exclude '*.tmp' -a /var/www/html/upload/ [email protected]:/var/www/html/upload/

现在,无论文件在/var/www/html/upload /目录中上传到其中:都将执行rsync将文件同步到www2.example.com服务器。
确保设置了ssh密钥以减少密码登录。

如何递归监视/var/www/html/upload /及其子目录?

您不能递归监视/var/www/html/upload /目录。
但是,可以使用find命令添加所有子目录,如下所示:

find /var/www/html/upload -type d -print0 | xargs -0 -I{} echo "{} IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync --exclude '*.tmp' -a /var/www/html/upload/ [email protected]:/var/www/html/upload/" > /etc/incron.d/webroot.conf

这将创建/etc/incron.d/webroot.conf配置,如下所示:

/var/www/html/upload IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync --exclude '*.tmp' -a /var/www/html/upload/ [email protected]:/var/www/html/upload/
/var/www/html/upload/css IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync --exclude '*.tmp' -a /var/www/html/upload/ [email protected]:/var/www/html/upload/
/var/www/html/upload/1 IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync --exclude '*.tmp' -a /var/www/html/upload/ [email protected]:/var/www/html/upload/
/var/www/html/upload/js IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync --exclude '*.tmp' -a /var/www/html/upload/ [email protected]:/var/www/html/upload/
/var/www/html/upload/3 IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync --exclude '*.tmp' -a /var/www/html/upload/ [email protected]:/var/www/html/upload/
/var/www/html/upload/2010 IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync --exclude '*.tmp' -a /var/www/html/upload/ [email protected]:/var/www/html/upload/
/var/www/html/upload/2010/11 IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync --exclude '*.tmp' -a /var/www/html/upload/ [email protected]:/var/www/html/upload/
/var/www/html/upload/2010/12 IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync --exclude '*.tmp' -a /var/www/html/upload/ [email protected]:/var/www/html/upload/
/var/www/html/upload/2 IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync --exclude '*.tmp' -a /var/www/html/upload/ [email protected]:/var/www/html/upload/
/var/www/html/upload/files IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync --exclude '*.tmp' -a /var/www/html/upload/ [email protected]:/var/www/html/upload/
/var/www/html/upload/images IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync --exclude '*.tmp' -a /var/www/html/upload/ [email protected]:/var/www/html/upload/

日志文件?

您需要查看/var/log/cron日志文件来解决遇到的问题:

# tail -f /var/log/cron
# grep something /var/log/cron