1
dorentus 2016-02-22 09:49:22 +08:00 1
可以用 inotify
|
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 |
3
dorentus 2016-02-22 10:29:52 +08:00 1
|
4
Counter OP @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 |
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 |