收穫
-
檢視 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 mainimport ( "fmt"
"log"
"os/exec"
"time"
"github.com/radovskyb/watcher")func main() {
w := watcher.New()
w.SetMaxEvents(1)
w.FilterOps(watcher.Create, watcher.Write, watcher.Chmod) go func() { for { select { case 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 := case return
}
}
}()
if err := w.Add("/srv/git/objects"); err != nil {
log.Fatalln(err)
}
if err := w.AddRecursive("/srv/git/objects"); err != nil {
log.Fatalln(err)
}
go func() {
w.Wait()
w.TriggerEvent(watcher.Create, nil)
w.TriggerEvent(watcher.Write, nil)
w.TriggerEvent(watcher.Chmod, nil)
}()
if err := w.Start(time.Millisecond * 100); err != nil {
log.Fatalln(err)
}
}
長按二維碼向我轉賬
受蘋果公司新規定影響,微信 iOS 版的贊賞功能被關閉,可透過二維碼轉賬支援公眾號。
微信掃一掃
使用小程式