V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Counter
V2EX  ›  Linux

当文件有改动时执行命令,只能采用定时检测而不能采用触发?

  •  
  •   Counter · 2016-02-22 09:42:03 +08:00 via iPhone · 3088 次点击
    这是一个创建于 3003 天前的主题,其中的信息可能已经有所发展或是发生改变。
    经常有这样的场景,当文件有改动后,希望它能执行某些操作,在不更改生成此文件的源程序前提下,似乎只能另外写脚本定时检测文件是否改动,再用此脚本执行相关操作,而不能采用触发,当文件改动时触发执行某脚本?
    6 条回复    2016-02-23 16:50:56 +08:00
    dorentus
        1
    dorentus  
       2016-02-22 09:49:22 +08:00   ❤️ 1
    可以用 inotify
    reage
        2
    reage  
       2016-02-22 09:54:42 +08:00   ❤️ 1
    有很多语言都这个的实现。比如 node fs.watch 相关的, linux c 语言的 inotify, c#中的 FileSystemWatcher 。
    本人写了一个代码同步工具。本地机器就是采用的 node 的 fs.watch ,检测到文件变化,然后,发送给服务端的。有兴趣 可以看下。 https://github.com/rentiansheng/devSync/blob/master/client/watch.js
    dorentus
        3
    dorentus  
       2016-02-22 10:29:52 +08:00   ❤️ 1
    Counter
        4
    Counter  
    OP
       2016-02-23 16:06:35 +08:00
    @dorentus
    @reage

    想要实现的效果是,保持监控文件 /var/log/aaa.log ,当文件被修改时执行 10 遍 for 循环,下面是整个 bash 脚本代码:

    while [ true ]; do
    if [ $(inotifywait -e MODIFY --format '1' /var/log/aaa.log) -eq 1 ]; then
    for (( i=1; i<=10; i++)); do

    #这里是要执行的代码,代码不使用到 inotifywait 的输出

    done
    fi
    done

    这里有个问题,如何把 inotifywait 加了参数 m ,把外层的 while 循环换掉?改成下面这样不行

    inotifywait -me MODIFY --format '1' /var/log/aaa.log | for (( i=1; i<=10; i++)); do

    #这里是要执行的代码,代码不使用到 inotifywait 的输出

    done
    dorentus
        5
    dorentus  
       2016-02-23 16:43:17 +08:00   ❤️ 1
    inotifywait 应该是一直等待,等到指定的 event 发生后,就退出了,所以外面的循环还是要的,你上面的代码应该也没啥问题。当然用下面的写法似乎也一样:


    #!/bin/sh

    while inotifywait -e MODIFY --format '1' /var/log/aaa.log; do
    for (( i=1; i<=10; i++)); do
    # 这里是要执行的代码,代码不使用到 inotifywait 的输出
    done
    done
    Counter
        6
    Counter  
    OP
       2016-02-23 16:50:56 +08:00
    @dorentus inotifywait 加参数 m 可以保持监控不退出,但是不知道怎么用在这里?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5660 人在线   最高记录 6547   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:28 · PVG 16:28 · LAX 01:28 · JFK 04:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.