什么是 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 是一个很好的解决方案:
- 通知程序(例如服务器守护程序)有关配置的更改
- 保护关键文件的变化(最终恢复)
- 文件使用情况监控,统计
- 自动碰撞清理
- 自动更新备份或版本控制
- 新邮件通知(maildir)
- 服务器上传通知
- 安装管理(外包装系统)
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