GO實現資料夾監控
GO 實現資料夾監控
收穫
- 檢視 watcher.go, 看出實現一個系統 event 的監控,程式碼不過 625 行;
- 執行 exec.Cmd(), cmd.Run(), 可以獲得 shell 的執行狀態;
- 開始閱讀 github 上的開原始碼, 程式碼特別精簡;
說明
專案組有一個需求,即當團隊人員更新 Gitbook 到伺服器的時候,伺服器的 gitbook 目錄下需要 pull 操作;
通過了解,當成員提交 push 內容到伺服器的時候, git/objects 目錄下內容會 create, modify, access 等事件;
前期通過 shell+inotifywait 實現,但是總存在 push 的時候獲取不到,或者上 push 之後頻繁更新 gitbook;
本次使用 github.com/radovskyb/watcher 來使用;
其中在本地執行如下命令, 獲取 watcher 的庫;
go get github.com/radovskyb/watcher
通過範例,結合自己的指令碼 pull.book.sh; 完成 git book 的操作;
package main
import (
"fmt"
"log"
"os/exec"
"time"
"github.com/radovskyb/watcher"
)
func main() {
w := watcher.New()
// SetMaxEvents to 1 to allow at most 1 event's to be received
// on the Event channel per watching cycle.
//
// If SetMaxEvents is not set, the default is to send all events.
w.SetMaxEvents(1)
// Only notify rename and move events.
// w.FilterOps(watcher.Rename, watcher.Move)
w.FilterOps(watcher.Create, watcher.Write, watcher.Chmod)
go func() {
for {
select {
case event := <-w.Event:
fmt.Println(event) // Print the event's info.
c := "pull.book.sh"
cmd := exec.Command(c, "")
err := cmd.Run()
fmt.Printf("Command finished with error: %v\n", err)
case err := <-w.Error:
log.Fatalln(err)
case <-w.Closed:
return
}
}
}()
// Watch this folder for changes.
if err := w.Add("/srv/git/objects"); err != nil {
log.Fatalln(err)
}
// Watch test_folder recursively for changes.
if err := w.AddRecursive("/srv/git/objects"); err != nil {
log.Fatalln(err)
}
/*
// Print a list of all of the files and folders currently
// being watched and their paths.
for path, f := range w.WatchedFiles() {
fmt.Printf("%s: %s\n", path, f.Name())
}
fmt.Println()
*/
// Trigger 2 events after watcher started.
go func() {
w.Wait()
w.TriggerEvent(watcher.Create, nil)
w.TriggerEvent(watcher.Write, nil)
w.TriggerEvent(watcher.Chmod, nil)
}()
// Start the watching process - it'll check for changes every 100ms.
if err := w.Start(time.Millisecond * 100); err != nil {
log.Fatalln(err)
}
}
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- WPF 實現檔案/資料夾監聽工具
- 大資料開發-資料表監控-實現大資料
- linux監控資料夾內的檔案數量Linux
- TiDB監控實現--存活監控TiDB
- go-kit 微服務 服務監控 (prometheus 實現)Go微服務Prometheus
- UAVStack的慢SQL資料庫監控功能及其實現SQL資料庫
- Java實現壓縮資料夾Java
- 使用 Performance API 實現前端資源監控ORMAPI前端
- MySQL監控-Datadog資料庫監控調研MySql資料庫
- 洗碗機廠家如何實現遠端監控與資料分析
- 前端資料監控到底在監控什麼?前端
- 用canal監控binlog並實現mysql定製同步資料的功能MySql
- 資料監控可以監測業務指標的實現情況,發現是否有升高或降低指標
- 系統監控&JVM監控指標資料查詢JVM指標
- Prometheus+Grafana實現服務效能監控:windows主機監控、Spring Boot監控、Spring Cloud Alibaba Seata監控PrometheusGrafanaWindowsSpring BootCloud
- 全球疫情實時監控——約翰斯·霍普金斯大學資料大屏實現方案
- Java實現ZooKeeper的zNode監控Java
- 用原生 JS 實現 MVVM 框架1——觀察者模式和資料監控JSMVVM框架模式
- 資料庫監控---PIGOSS BSM資料庫Go
- 監控資料庫活動資料庫
- 資料庫繁忙程度監控資料庫
- 工業物聯網資料中臺實現多種資料監控與智慧管理
- Spark+Kafka實時監控Oracle資料預警SparkKafkaOracle
- 監控採集上報和儲存監控資料策略
- OpenTelemetry 實戰:gRPC 監控的實現原理RPC
- Go 系統監控利器-gopsutilGo
- php 刪除資料夾的實現程式碼PHP
- Prometheus監控之SNMP Exporter介紹和資料展現PrometheusExport
- 使用C#如何監控選定資料夾中檔案的變動情況?C#
- 精讀《如何利用 Nodejs 監聽資料夾》NodeJS
- JS實現監控微信小程式JS微信小程式
- Java實現檔案監控器FileMonitorJava
- Python呼叫阿里雲資料庫監控資料Python阿里資料庫
- 前端監控(效能/資料/異常)前端
- zabbix清除歷史監控資料
- Zabbix監控神通資料庫教程資料庫
- shell監控mysql 8.0資料庫MySql資料庫
- shell監控mysql 5.7資料庫MySql資料庫