Linux监听文件变化并触发指令

简介

Linux系统使用inotify监听文件的变化(创建、删除、修改等),并触发指令。
例如:当某个文件被修改后,自动重启电脑。

安装

1
yum install -y inotify-tools

使用

实现效果:当/root/video*.jar文件修改后,自动执行脚本/root/deplay.sh

  1. 创建监听脚本
    1
    2
    3
    4
    5
    6
    7
    echo 'inotifywait -m -e CLOSE_WRITE /root/video*.jar |
    while read events;
    do
    echo $events;
    sh /root/deplay.sh
    echo "reload video"
    done' > /root/inotify-reboot.sh
  2. 运行监听脚本
    1
    sh inotify-reboot.sh

参数描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
inotifywait:
-m :实时监控。
-d:后台运行。
-r:递归,对子目录监控。
-e:监控事件。以下
access:检测文件访问事件。
close_write:写入关闭事件。
modify:文件发生变化。
attrib:文件属性变化事件。
delete:文件被删除。
--timefmt :当在--format选项中使用%T时,--timefrt选项则可以用来指定自定义的符合strftime规范的时间格式,此时间格式可用的格式符可以通过strftime的手册页获取;--timefrt后常用的参数是'%d/%m/%y %H:%M';
--format :自定义inotifywait的输出格式,如--format '%T %w %f';常用的格式符如下:
%w:显示被监控文件的文件名;
%f:如果发生某事件的对象是目录,则显示被监控目录的名字;默认显示为空串;
%T:使用--timefmt选项中自定义的时间格式.
eg. inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write /data #输出时间
eg. innotifywait -mrq --format '%w%f' -e create,close_write,delete /data #简化输出
-m :永远监控,实时监控。
-d:后台运行。
-q:仅打印监控事件的信息。
-r:递归,对子目录监控。
-e:监控事件。以下
access:检测文件访问事件。
close_write:写入关闭事件。
modify:文件发生变化。
attrib:文件属性变化事件。
delete:文件被删除。
--timefmt :当在--format选项中使用%T时,--timefrt选项则可以用来指定自定义的符合strftime规范的时间格式,此时间格式可用的格式符可以通过strftime的手册页获取;--timefrt后常用的参数是  '%d/%m/%y %H:%M';
--format :自定义inotifywait的输出格式,如--format '%T %w %f';常用的格式符如下:
%w:显示被监控文件的文件名.
%f:如果发生某事件的对象是目录,则显示被监控目录的名字;默认显示为空串;
%T:使用--timefmt选项中自定义的时间格式.
eg. inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write /data #输出时间.
eg. innotifywait -mrq --format '%w%f' -e create,close_write,delete /data #
坚持原创技术分享,您的支持将鼓励我继续创作!