Linux incrond监视文件系统事件并执行命令或Shell脚本

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

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

inotify是基于inode的文件系统通知技术。它提供了监视文件系统中文件各种事件的可能性。它是(过时)dnotify的非常好替代。inotify带来了一种轻松的方式来管理应用程序中使用的文件。incrondinotify cron守护程序)是一个守护程序,它监视文件系统事件(例如添加新文件,删除文件等)并执行命令或Shell脚本。它的用法通常类似于LinuxUnix 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_CREATEIN_ATTRIBIN_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作为参数传递给命令):
    1. $$ –美元符号
    2. $ @ –监视的文件系统路径(见上文)
    3. $ –与事件相关的文件名
    4. $ –事件标志(以文本形式)
    5. $ –事件标志(按数字)

开启服务

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_WRITEIN_CREATEIN_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_WRITEIN_CREATEIN_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_WRITEIN_CREATEIN_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_WRITEIN_CREATEIN_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_WRITEIN_CREATEIN_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_WRITEIN_CREATEIN_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_WRITEIN_CREATEIN_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_WRITEIN_CREATEIN_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_WRITEIN_CREATEIN_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_WRITEIN_CREATEIN_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_WRITEIN_CREATEIN_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

进一步阅读:

  • 在此处为项目主页充声
  • 手册页– incrontab5),incrondincron.conf

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值