golang版supervisor 已經線上上使用
背景
gosuv是基於github.com/codeskyblue/gosuv 做了一些修改,修復了一些致命的問題,增加了一些功能,現在已經線上上執行一段時間。歡迎大家使用。 https://github.com/ohlinux/gosuv
相對python版的 部署更是方便。不受多套python環境的影響。 而且根據實際的操作,加入些新的小功能。
gosuv
gosuv是golang版的supervisor的程式管理程式,類似python版的superviosr. gosuv有安裝部署簡單,使用便利等優點.
wiki地址:
當前版本
gosuv version 201712041615
功能列表
- [x] 命令列
- [x] server控制
- [x] 啟動 start-server
- [x] 關閉 shutdown
- [x] 檢視狀態 status-server
- [x] 重啟 restart-server
- [x] 殺程式 kill
- [x] 過載 reload
- [x] 配置檢查 conftest
- [x] programs控制
- [x] 啟動 start
- [x] 停止 stop
- [x] 編輯 edit
- [x] 狀態 status
- [x] 啟動 start
- [x] server控制
- [x] web頁面控制
- [x] Start, Stop, Tail, Reload
- [x] Realtime log
- [x] Add program support
- [x] Edit support
- [x] Delete support
- [x] Memory and CPU monitor
- [x] 日誌管理
- [x] gosuv server日誌
- [x] programs標準/錯誤輸出日誌
- [x] gosuv server日誌切割
- [ ] programs 日誌切割
- [x] HTTP Server
- [x] Unix Sock Server
- [x] 基本的使用者密碼驗證
- [x] 靜態檔案編譯入bin
- [ ] 授權ip列表
- [ ] shell介面
- [x] 平滑關閉
- [ ] 首次啟動失敗,邊界處理
總體介紹
gosuv是一個集server和client一體的命令列. server又分為HTTP和Unix兩種分別對應web和sock管理兩種方式. 並且提供了web操作介面.
主要的功能是為管理程式提供守護服務,當被管理的服務異常退出的時候再嘗試拉起.
Quick start
編譯安裝
cd ${git dir}
bash hack/build.sh
編譯成功將gosuv檔案放置到bin目錄下
預設啟動服務
$./gosuv start-server
server started, listening .gosuv.sock.
在當前沒有config的情況下會產生預設的config.yml在當前目錄.預設使用sock的管理方式.
檢視server狀態
$./gosuv status-server
server is running
表示服務提供正常
新增Programs
預設沒有programs的配置檔案.
建立programs.yml到當前目錄.
- name: redis-test # programs的名字唯一
command: redis-server --port 6679
environ: []
directory: /tmp
start_auto: true #代表gosuv啟動的時候預設啟動該程式
start_retries: 3 # 1分鐘內的重啟次數, 1分鐘內重啟成功,會重新計數. 所以不建議設定太大 如果太大容易造成永遠retry. 還有優化的空間.
user: work #指定使用者啟動, 但是非root不用指定使用者
redirect_stderr: true # 把 stderr 重定向到 stdout,預設 false
log_disable: false # 是否禁用螢幕輸出 預設為false ,如果標準輸出和錯誤輸出太多可以關閉.
PS: programs的日誌沒有切割功能,所以如果標準輸出內容太多,可以使用log_disable : true 關閉
啟動program
重新載入配置
$ ./gosuv reload
load config success
檢視狀態
$ ./gosuv status
PROGRAM NAME STATUS
redis-test running
關閉program
$ ./gosuv stop redis-test
高階用法
開發使用場景
-
開發使用場景,可以開啟HTTP WEB的方式.
-
可以在web上面新增programs
- 每個gosuv可以管理多個程式.
線上服務場景
-
建議使用unix server的方式.(減少埠占用)
-
1個gosuv管理一個程式服務.
- 可以新增授權等操作.
配置檔案說明
include: ./conf/programs.yml #指定programs檔案, 這個版本不支援. 當前版本還是預設和主配置檔案同一個目錄,檔名programs.yml固定
server:
httpserver: ## http api
enabled: false ## 是否啟用 如果httpserver啟動優先順序大於unixserver
addr: :11333 ## ip:port, :port的意思是bind all 0.0.0.0
unixserver: ## unix api
enabled: true ## 預設啟動
sockfile: .gosuv.sock ## sock file位置,預設當前目錄.gosuv.sock
auth: ## 許可權
enabled: true ## 是否啟動
username: abc ## 使用者名稱
password: abc ## 密碼
ipfile: "" ## ip授權列表 這版本暫時未支援
pidfile: .gosuv.pid ## gosuv pid檔案,預設當前目錄.gosuv.pid
log:
logpath: logs ## 日誌存在目錄 會儲存gosuv.log 和各個programs(被管理程式的螢幕輸出)
level: info ## 日誌級別
filemax: 10000 ## 每個日誌檔案大小
backups: 10 ## 切割保留的日誌數量
minfds: 1024 ## 可以開啟的檔案描述符的最小值 暫不支援
minprocs: 1024 ## 可以開啟的程式數的最小值 暫不支援
client: ## client配置, 可以獨立於server使用和配置.
server_url: unix://.gosuv.sock ## url的配置 兩種格式 unix://file.sock 和http://ip:port 例如: unix:///tmp/gosuv.sock 或者http://127.0.0.1:8181 與server的方式相對應
username: abc ## server要求的使用者名稱
password: abc ## server要求的密碼
PS: programs的日誌沒有切割功能,這裡的日誌切割配置只管理了gosuv.log本身的日誌
命令列說明
$./gosuv -h
NAME:
gosuv - golang supervisor
USAGE:
gosuv [global options] command [command options] [arguments...]
VERSION:
201711232023
AUTHOR:
COMMANDS:
start-server Start supervisor and run in background 啟動gosuv 並放到後臺,如果要在前臺使用,可以新增 -f
status, st Show program status 檢視programs的狀態
status-server Show server status 檢視server的狀態
start Start program
stop Stop program
reload Reload config file
shutdown Shutdown server 優雅關閉,會先關閉programs再退出.
kill kill stop server by pid file. kill程式通過pid
restart-server restart server 重啟server
conftest, t Test if config file is valid
edit Edit config file
version, v Show version
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--conf value, -c value config file (default: "config.yml")
--help, -h show help
--version, -v print the version
web介面管理
靜態檔案編譯
./hack/install.sh
可以將res下面的靜態檔案編譯到bin檔案中.這樣安裝部署只有一個bin檔案,不需要單獨部署靜態檔案.
注意事項
kill與kill -9
- kill
預設傳送的是SIGQUIT指令,可以被gosuv獲取到訊號,所以會平滑的退出所有託管的程式. - kill -9
傳送的是SIGKILL指令,是不可以被gosuv獲取到資訊,所以所有託管的程式會被系統託管,gosuv本身退出. 程式服務可能還能正常提供服務.
Linux Singal http://colobu.com/2015/10/09/Linux-Signals/
配置修改時間點
- 如果gosuv正在提供服務,修改了其中的client的連線方式等會導致無法正常使用API或者cmd. 所以建議shutdown後再進行配置的修改再啟動生效.
重啟次數
重啟次數是在一分鐘內的次數,如果超過一分鐘,重啟次數會進行重置.所以不建議一分鐘類重啟次數過多,可能會導致無限重啟的情況,因為重啟後的每隔1分鐘就會被重置.
Design
HTTP is follow the RESTFul guide.
Get or Update program
<GET|PUT> /api/programs/:name
Add new program
POST /api/programs
Del program
DELETE /api/programs/:name
State
Only 4 states. ref
宣告
程式碼重構源於github.com/codeskyblue/gosuv 有時間提交貢獻程式碼.
相關文章
- Golang 程式守護 SupervisorGolang
- golang: 線上上用nginx部署應用GolangNginx
- ccproject 6.47版已經發布Project
- 1.8正式版已經發布,希望GoCN下載裡面能同步上Go
- Supervisor使用詳解
- Supervisor 使用總結
- Laravel中使用supervisorLaravel
- python supervisor使用Python
- supervisor 使用記錄
- [golang]如何在windows上使用cgoGolangWindows
- 使用svnClientAdapter程式設計控制上傳下載已經實現VNCclientAPT程式設計
- Supervisor 安裝與使用
- 使用 Golang 寫爬蟲經驗總結Golang爬蟲
- 試玩 GOWOG ,初探 OpenAI(使用 NeuroEvolution 神經進化)與 Golang 多人線上遊戲開發OpenAIGolang遊戲開發
- [Golang三關-典藏版]一站式Golang記憶體洗髓經Golang記憶體
- Linux Mint 18 Cinnamon 版和 MATE 版已經可以下載了Linux
- nodejs開發-supervisor使用NodeJS
- supervisor使用報錯解決
- 微軟已經放棄使用win10創意者更新春季版名稱微軟Win10
- Ipv6_Only 簡單的理解(已驗證,專案已經上線)
- Golang工程經驗Golang
- 在MacOS上使用gdb(cgdb)除錯Golang程式Mac除錯Golang
- Golang線上工具遷入VercelGolang
- 有度 Golang 版 SDKGolang
- Ubuntu 14.04 正式版釋出,已經可以下載Ubuntu
- 高曉松:阿里音樂版權不清歌曲已經全部下架阿里
- 微軟Silverlight 3正式版已經出爐微軟
- 查詢所有表空間的總容量、已經使用、剩餘、已經使用的百分比,增加容量!
- 經典排序演算法 — C# 版(上)排序演算法C#
- Golang服務端面經Golang服務端
- 因配置失誤 超1.3萬iSCSI儲存叢集已線上上暴露
- 首款AI看球機器人亮相北京,已上線IOS版和安卓版AI機器人iOS安卓
- 程式管理程式supervisor安裝和使用
- 使用 Supervisor 管理 Laravel 佇列和 HorizonLaravel佇列
- .Net Core 程式守護之Supervisor使用
- 【Linux】使用 Supervisor管理後臺程式Linux
- 使用Python的Supervisor來管理程式Python
- 已經編譯好的opencv QT creator直接使用編譯OpenCVQT