Linux incrond初始化监视器目录以进行更改并采取措施
每当要在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