×

incron的用法

2022-08-05 16:34:18 Falcon

安装启动:

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 错误是什么问题,怎么解决?

 

 
本文收录于