V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Counter
V2EX  ›  Linux

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

  •  
  •   Counter · Feb 22, 2016 via iPhone · 3548 views
    This topic created in 3721 days ago, the information mentioned may be changed or developed.
    经常有这样的场景,当文件有改动后,希望它能执行某些操作,在不更改生成此文件的源程序前提下,似乎只能另外写脚本定时检测文件是否改动,再用此脚本执行相关操作,而不能采用触发,当文件改动时触发执行某脚本?
    6 replies    2016-02-23 16:50:56 +08:00
    dorentus
        1
    dorentus  
       Feb 22, 2016   ❤️ 1
    可以用 inotify
    reage
        2
    reage  
       Feb 22, 2016   ❤️ 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  
       Feb 22, 2016   ❤️ 1
    Counter
        4
    Counter  
    OP
       Feb 23, 2016
    @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  
       Feb 23, 2016   ❤️ 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
       Feb 23, 2016
    @dorentus inotifywait 加参数 m 可以保持监控不退出,但是不知道怎么用在这里?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   886 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 18:57 · PVG 02:57 · LAX 11:57 · JFK 14:57
    ♥ Do have faith in what you're doing.