您好,登錄后才能下訂單哦!
本篇內容介紹了“golang如何實現文件監控”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
在golang中,可以利用fsnotify來實現文件監控。fsnotify是go語言跨平臺文件系統監控工具,實現了一個基于channel的、跨平臺的實時監聽接口;golang通過fsnotify可監控文件,并通過文件變化重啟程序。
在golang中,可以利用fsnotify來實現文件監控。
golang 通過fsnotify監控文件,并通過文件變化重啟程序。
go語言跨平臺文件系統監控工具 — fsnotify
在 linux 內核中,Inotify 是一種用于通知用戶空間程序文件系統變化的機制。它監控文件系統的變化,如文件新建、修改、刪除等,并可以將相應的事件通知給應用程序。
Inotify 既可以監控文件,也可以監控目錄。當監控目錄時,它可以同時監控目錄及目錄中的各子目錄及文件。Golang 的標準庫 syscall 實現了該機制。
為了進一步擴展和抽象, github.com/fsnotify/fsnotify 包實現了一個基于 channel 的、跨平臺的實時監聽接口。
fsnotify工具的使用
一、下載我們需要的包
go get github.com/fsnotify/fsnotify
二、使用fsnotify監控文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
|
測試結果如下:
我們在tmp目錄下的操作都被捕捉到了,但是fsnotify有一個問題,它無法遞歸的幫我們捕捉子目錄、孫子目錄的操作事件,這需要我們自已來實現。
還有一個問題就是當們修改文件夾名稱時,fsnotify中event.Name仍然是原來的文件名,這就需要我們在重命名事件中,先移除之前的監控,然后添加新的監控。
修改如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
|
測試結果如下:
經過上面的例子,我們通過fsnotify來寫一個監控配置文件,如果配置文件有修改,就重新啟動服務。
我們先寫一個可以運行的exe程序,server.go代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
|
使用如下命令,編譯成exe文件
1 |
|
監控文件fsnotify3.go代碼如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
|
我們運行fsnotify3.go文件來監控我們的配置文件
通過上面的圖可以看到,當我們修改配置文件中的端口號時,會先kill掉進程,然后再啟動一個進程。
“golang如何實現文件監控”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。