|
@@ -0,0 +1,51 @@
|
|
|
+package fsnotify
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "log"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ "github.com/fsnotify/fsnotify"
|
|
|
+)
|
|
|
+
|
|
|
+var applyAction = map[string]int64{}
|
|
|
+var applyTime int64 = 5
|
|
|
+
|
|
|
+func FSNotifyFUNC(name, dir string, flag bool, f func()) {
|
|
|
+ if flag {
|
|
|
+ f()
|
|
|
+ }
|
|
|
+ watch, err := fsnotify.NewWatcher()
|
|
|
+ if err != nil {
|
|
|
+ log.Println("watch new err", err)
|
|
|
+ }
|
|
|
+ defer watch.Close()
|
|
|
+ err = watch.Add(dir)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("watch add err", err)
|
|
|
+ }
|
|
|
+ for {
|
|
|
+ select {
|
|
|
+ case ev := <-watch.Events:
|
|
|
+ {
|
|
|
+ if ev.Op&fsnotify.Write == fsnotify.Write {
|
|
|
+ now := time.Now().Unix()
|
|
|
+ //5秒之内 同一个文件不作操作
|
|
|
+ if applyAction[fmt.Sprintf(name, ev.Name)] != 0 && now-applyAction[fmt.Sprintf(name, ev.Name)] < applyTime {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ log.Println("修改文件 : ", fmt.Sprintf(name, ev.Name))
|
|
|
+ applyAction[fmt.Sprintf(name, ev.Name)] = now
|
|
|
+ time.Sleep(1 * time.Second)
|
|
|
+ //更新应用版本号
|
|
|
+ go f()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ case err := <-watch.Errors:
|
|
|
+ {
|
|
|
+ log.Println("watch error : ", err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|