我的專案使用的是gin框架,預設開發情況下執行起來還是沒有大問題的,go run xxx.go開著命令視窗,然後去瀏覽器訪問就行了。現在想要把服務部署到伺服器,這個命令視窗可就不能保證一直執行了。
讓程式後臺執行很簡單,加個nohup xxxx &就行,但是想要把程式變成守護程式,就不能這麼做了。守護程式需要能在意外退出以後,還能再次拉起來執行,剛才那個後臺程式斷了以後,是不會被拉起來執行的。
還有一種大部分常見的解決方式是使用supervisor來守護,這種方式需要多安裝一個supervisor的服務,不符合我的專案宗旨,儘量簡單無依賴。
為了能變成守護程式,我找到一個很簡單的庫 github.com/zh-five/xdaemon
運用的話很方便,在gin框架的run方法之前,加上這個就可以
d := xdaemon.NewDaemon(common.LogDirPath + "gofly.log")
d.MaxError = 10
d.Run()
這個會實現,一個父程式守護一個子程式,當子程式意外退出的時候,能把子程式拉起來
d.MaxError這個引數限制的是,bug導致崩潰的程式,最多拉起來的次數,因為如果有bug,無限拉起來,會變成死迴圈的
這個庫判斷bug崩潰的程式,依據是根據執行時間,預設是認為當執行時間小於10秒的作為子程式出錯的,進行計數。
後面還遇到了哪些問題和知識點將會繼續進行總結。
演示網站:
gofly.sopans.com
本作品採用《CC 協議》,轉載必須註明作者和本文連結