Linux incrond初始化监视器目录以进行更改并采取措施
想要在Linux操作系统下的/ var / www / html / upload /目录中上载或删除文件时,为了备份和/或负载平衡目的而复制或同步目录树(而不是远程服务器),而无需进行复杂的文件共享设置,例如作为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命令:在Debian / Ubuntu Linux下
$ sudo yum install incron
键入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语法
语法如下:
<目录> <文件更改掩码> <命令或操作>选项
/ 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重新加载
哪里,
- <directory> –只是路径,它是绝对文件系统路径,例如/ home / data。对此路径所做的任何更改都会导致命令或操作。
- <文件更改掩码> –掩码不过是各种文件系统事件,例如删除文件。每个事件都可以导致命令执行。使用以下面具:
- 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 -e
/ tmp目录中创建或删除文件时,键入以下命令来编辑incrontab Run 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 vivek-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/ user@www2.example.com:/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/ user@www2.example.com:/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-排除'* .tmp'-a / var / www / html / upload / user@www2.example.com:/ var / www / html / upload /
/ var / www / html / upload / css IN_CLOSE_WRITE,IN_CREATE,IN_DELETE / usr / bin / rsync-排除'* .tmp'-a / var / www / html / upload / user@www2.example.com:/ var / www / html / upload /
/ var / www / html / upload / 1 IN_CLOSE_WRITE,IN_CREATE,IN_DELETE / usr / bin / rsync-排除'* .tmp'-a / var / www / html / upload / user@www2.example.com:/ var / www / html / upload /
/ var / www / html / upload / js IN_CLOSE_WRITE,IN_CREATE,IN_DELETE / usr / bin / rsync-排除'* .tmp'-a / var / www / html / upload / user@www2.example.com:/ var / www / html / upload /
/ var / www / html / upload / 3 IN_CLOSE_WRITE,IN_CREATE,IN_DELETE / usr / bin / rsync-排除'* .tmp'-a / var / www / html / upload / user@www2.example.com:/ var / www / html / upload /
/ var / www / html / upload / 2010 IN_CLOSE_WRITE,IN_CREATE,IN_DELETE / usr / bin / rsync-排除'* .tmp'-a / var / www / html / upload / user@www2.example.com:/ var / www / html / upload /
/ var / www / html / upload / 2010/11 IN_CLOSE_WRITE,IN_CREATE,IN_DELETE / usr / bin / rsync-排除'* .tmp'-a / var / www / html / upload / user@www2.example.com: / var / www / html / upload /
/ var / www / html / upload / 2010/12 IN_CLOSE_WRITE,IN_CREATE,IN_DELETE / usr / bin / rsync-排除'* .tmp'-a / var / www / html / upload / user@www2.example.com: / var / www / html / upload /
/ var / www / html / upload / 2 IN_CLOSE_WRITE,IN_CREATE,IN_DELETE / usr / bin / rsync-排除'* .tmp'-a / var / www / html / upload / user@www2.example.com:/ var / www / html / upload /
/ var / www / html / upload / files IN_CLOSE_WRITE,IN_CREATE,IN_DELETE / usr / bin / rsync-排除'* .tmp'-a / var / www / html / upload / user@www2.example.com:/ var / www / html / upload /
/ var / www / html / upload / images IN_CLOSE_WRITE,IN_CREATE,IN_DELETE / usr / bin / rsync-排除'* .tmp'-a / var / www / html / upload / user@www2.example.com:/ var / www / html / upload /
如何解决问题?
您需要查看/ var / log / cron日志文件:
# tail -f /var/log/cron
# grep something /var/log/cron
进一步阅读:
- 在此处为项目主页充声
- 手册页– incrontab(5),incrond和incron.conf