摘要
正在生成中……
安装启动:
centos
yum install incron
systemctl enable --now incrond
ubuntu
sudo apt-get install incron
systemctl enable --now incron
配置文件位于 /etc/incron.conf
,可以修改默认编辑器等配置。
incrontab 使用
用法:
incrontab [<options>] <operation>
或 incrontab [<options>] <FILE-TO-IMPORT>
参数类似crontab
incrontab -h #查看帮助
incrontab -e #编辑
incrontab -l #列出用户的table
incrontab -d #重载用户table
incrontab -t #列出支持的事件类型
PS:ubuntu不推荐使用root运行 incrontab -t
显示 user 'root' is not allowed to use incron
,向/etc/incron.allow
写入root
即可。
向 incrontab 添加任务
任务格式:
<path> <mask> <command>
具体功能:
<path> 是一个文件系统路径(避免空格)
<mask> 可以通过incrontab -t
查看支持的事件类型
<command> 是在事件上运行的应用程序或脚本
<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> - 这是在事件被触发时将运行的命令。
可以使用通配符:
命令 |
含义 |
$$ |
打印美元符号 |
$@ |
添加监视的文件系统路径 |
$# |
添加事件相关的文件名 |
$% |
添加事件标志(文本) |
$& |
添加事件标志(数字) |
案例
# 1: 当 /var/mail下的文件改变时运行命令abc
/var/mail IN_CLOSE_WRITE abc $@/$#
# 2: 监视 /tmp下的所有事件,事件发生时运行efg命令
/tmp IN_ALL_EVENTS efg $@/$# $&
由于从 0.4.0 版本后支持system tables, 位于/etc/incron.d 下的任务使用root权限执行,这些system tables可以直接执行 (不需要incrontab)。
incrontab 和 incrond 部分参数可以通过配置修改,参考案例文件查看详细解析
# 3:当mp3文件被移动到/home/u1/Music目录时运行 'playmp3' 命令
/home/u1/Music/*.mp3 IN_MOVED_TO playmp3 $@/$#
# 4: 监视/etc/目录下的文件夹或子文件夹,incron默认就支持递归监视,发生修改时向系统日志报告。
/etc/ IN_CLOSE_WRITE echo $@/$# | logger
# 5: 监视 /etc/apache 目录但排除子目录,发生修改时向系统日志报告。
/etc/apache IN_CLOSE_WRITE,recursive=false echo $@/$# | logger
# 6: 监视 /home/user1 (递归),包含"."开头的隐藏目录和文件,发生修改时向系统日志报告。
/home/user1 IN_CLOSE_WRITE,dotdirs=true echo $@/$# | logger
update 20220810
Inotify 可以监视的LINUX文件系统事件包括:
--IN_ACCESS,即文件被访问
--IN_MODIFY,文件被write
--IN_ATTRIB,文件属性被修改,如chmod、chown、touch等
--IN_CLOSE_WRITE,可写文件被close
--IN_CLOSE_NOWRITE,不可写文件被close
--IN_OPEN,文件被open
--IN_MOVED_FROM,文件被移走,如mv
--IN_MOVED_TO,文件被移来,如mv、cp
--IN_CREATE,创建新文件
--IN_DELETE,文件被删除,如rm
--IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
--IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己
--IN_UNMOUNT,宿主文件系统被umount
--IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
--IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)
update 20220918
查看日志
journalctl -f -u incron.service
更多debug相关的问题: https://hackaday.com/2020/10/28/linux-fu-troubleshooting-incron/
update 20220924
Arch的手册介绍得也很全面:
https://man.archlinux.org/man/incrontab.5.en
update 20220930
centos 7安装需要先启用epel repo
yum install epel-release
update 20230525
某些情况下子目录无法被监视,可能使用这个方式解决: 出现 inotify watch limit reached 错误是什么问题,怎么解决?
参考资料:
-
https://github.com/ar-/incron
-
https://trycoding.fun/Linux/How-to-use-incron/
-
https://www.cnblogs.com/bonelee/p/9668185.html