本文主要是介绍写go踩坑,使用第三方包fsnotify监听文件变动,Liunx下只能监听到第一次,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
写go踩坑,使用第三方包fsnotify监听文件变动,Liunx下只能监听到第一次
踩坑描述:今天接到一个监听文件变动后读取文件数据需求,在本地windows写的好好的,一点毛病都没,发到服务器ubuntu后就发现一个恶心问题,只有第一次修改才能监测到后面就监听不到,然后开启各种尝试定位百度一直没解决,后面发现原来是文件权限问题,日了。需要 chmod +777 filename 权限才能监听到
代码示例 监听1.txt文件变动
package mainimport ("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.Mutexvar 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)}}
}
这篇关于写go踩坑,使用第三方包fsnotify监听文件变动,Liunx下只能监听到第一次的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!