Skip to content

使用 Incron 监控重要文件和文件夹

Published: at 07:31 AMSuggest Changes

前面我已经写了 Git 的 Webhooks 使用文章,但如果我们使用 Dropbox 或者谷歌云盘进行文件同步,文件发生变动时怎么自动执行脚本呢? 可以选择使用 Incron 进行文件监控。

什么是 Incron

先放几个官方的说明:

This program is an “inotify cron” system. It consists of a daemon and a table manipulator. You can use it a similar way as the regular cron. The difference is that the inotify cron handles filesystem events rather than time periods. 这个程序是一个“inotify cron”系统。它由一个守护进程和一个表操作器组成。你可以像使用普通的 cron 一样使用它。区别在于 inotify cron 处理文件系统事件而不是时间段。

简单概括一下(译自 http://inotify.aiken.cz): incron 提供了一个简单的方法来解决许多和许多不同的情况。每当某些事情取决于文件系统事件时,它就是 incron 的工作。 在这里你可以看到几个例子,incron 是一个很好的解决方案:

Incron 安装

Centos7 下执行以下命令

yum install incron
service incrond start
chkconfig incrond on

如果提示缺少包,你可以去下载: pkgs.org

Ubuntu 则执行以下命令

sudo apt-get install incron

incrond 配置

使用 vi 编辑器

echo 'editor = vi' >> /etc/incron.conf #修改 incrond 默认编辑器为 vi

incrond 使用

启动

service incrond start

停止

service incrond stop

状态(调试)

service incrond status

查看帮助信息

incrontab -h

添加触发任务

incrontab -e

重载

incrontab -d

incrond 任务

使用下面的命令添加触发任务

incrontab -e

incron 守护进程(incrond)必须在根目录下运行(通常来自运行级脚本等)。 命令格式: <path> <mask> <command>

具体功能: <path> 是一个文件系统路径(避免空格) <mask> 是一个符号(请参阅 inotify.h;使用逗号分隔符号)或事件的数字掩码 <command> 是在事件上运行的应用程序或脚本

<path> - 这是您要观看的目录的路径。请注意,Incron 无法观看子目录。只有路径中的文件将被监控。如果你需要监视子目录,你必须给他们自己的条目。

<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文件已打开

<command> - 这是在事件被触发时将运行的命令。代替命令,您始终可以使用通配符。通配符将在 syslog 中报告基本信息。可用的通配符是:

命令含义
$$打印美元符号
$@添加观看的文件系统路径
$#添加事件相关的文件名
$%添加事件标志(文本)
$&添加事件标志(数字)

incrond 举例

我放一下自己的 incrond 任务

/root/Dropbox/hexo/source/_posts/ IN_MOVE,IN_MODIFY,IN_CREATE,IN_DELETE /root/runhexo.sh

当 /root/Dropbox/hexo/source/_posts/ 文件夹发生变动的时候运行/root/runhexo.sh

incrond 注意事项

我使用的时候,碰到了几个问题

使用 incrontab -e 编辑并保存后,任务未生效。 最后发现应该还要输入下面的命令重载一下

incrontab -d

使用下面的命令查看任务是否执行

service incrond status

没有 service incrond reload 这个命令,你可以自己自定义。 最后,不要忘记给脚本提权:

chmod -x runhexo.sh
chmod -R 777 /root/runhexo.sh

参考资料&转载来源


Previous Post
CentOS 7 下 FFmpeg 安装教程
Next Post
使用 Git Webhooks 自动化部署