写go踩坑,使用第三方包fsnotify监听文件变动,Liunx下只能监听到第一次
踩坑描述:今天接到一个监听文件变动后读取文件数据需求,在本地windows写的好好的,一点毛病都没,发到服务器ubuntu后就发现一个恶心问题,只有第一次修改才能监测到后面就监听不到,然后开启各种尝试定位百度一直没解决,后面发现原来是文件权限问题,日了。需要 chmod +777 filename 权限才能监听到
代码示例 监听1.txt文件变动
package main
import (
"fmt"
"github.com/fsnotify/fsnotify"
"log"
"sync"
"time"
)
func main() {
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal(err)
}
defer watcher.Close()
var mu sync.Mutex
var lastEventTime = make(map[string]time.Time)
err = watcher.Add("1.txt")
if err != nil {
return
}
for {
select {
case event := <-watcher.Events:
mu.Lock()
lastTime, ok := lastEventTime[event.Name]
currentTime := time.Now()
if !ok || currentTime.Sub(lastTime) > 500*time.Millisecond { // 500ms 作为示例
fmt.Printf("New event: %+v\n", event)
if event.Op&fsnotify.Write == fsnotify.Write {
fmt.Println("modified file:", event.Name)
}
lastEventTime[event.Name] = currentTime
}
mu.Unlock()
case err = <-watcher.Errors:
log.Println("error:", err)
}
}
}