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: 線上上用nginx部署應用GolangNginx
- 試玩 GOWOG ,初探 OpenAI(使用 NeuroEvolution 神經進化)與 Golang 多人線上遊戲開發OpenAIGolang遊戲開發
- 迷題已至-《迷霧之夏》移動版正式上線
- 哪裡可以下載Mac上最好用的前端設計軟體?Zeplin已經上線!Mac前端
- Golang 程式守護 SupervisorGolang
- 使用svnClientAdapter程式設計控制上傳下載已經實現VNCclientAPT程式設計
- 首款AI看球機器人亮相北京,已上線IOS版和安卓版AI機器人iOS安卓
- ps線上版 Photoshop線上精簡版-toolfk程式設計師線上工具網程式設計師
- 《盜賊之海》上線兩年來全球玩家使用者數量已經突破1000萬
- 暗黑的國創之光即將上線,暗黑粉已經等了5年
- 《艾爾登法環》24小時內Steam線上玩家峰值已經
- 同“窗”的較量:部署在 Windows 上的 .NET Core 版部落格站點發布上線(已暫時下線)Windows
- 斷點(上線版) - 阿韋斷點
- 重磅 | 吳恩達Coursera新課已經上線,開啟全民AI時代!吳恩達AI
- 智慧經營融合線上經營改變線下模式模式
- 大佬,您的選房系統已上線
- 心中無塵,碼字入神(Markdown 已上線!)
- 叮咚,TNAS Mobile 3.3已上線,請注意查收!
- 線上PS如何處理圖片 怎麼使用線上PS
- 在MacOS上使用gdb(cgdb)除錯Golang程式Mac除錯Golang
- 線上教育開源原始碼的市場前景如何?線上教育風口是否已過?原始碼
- 雙主角情感和生存之間的融合,《甦醒之路》現已上線EA版
- [解決]:【TeamViewer作為個人用途免費,但僅可使用在有限數量的裝置上。您已經到達可使用裝置的上線】View
- 呼叫醫生雲! Amazon HealthLake 現已正式上線
- 雲開發 CloudBase 已上線觸發器能力Cloud觸發器
- 新百勝現場經理線上
- 線上寫壓測經驗總結
- 因配置失誤 超1.3萬iSCSI儲存叢集已線上上暴露
- 線上git安裝與使用Git
- 阿里雲 Redis 混合儲存版上線阿里Redis
- 搶先微軟,Google版Copilot上線!微軟Go
- 經典排序演算法 — C# 版(上)排序演算法C#
- 基於 Golang/WebSocket/Canvas/Protobuf 的線上匿名交流遊戲GolangWebCanvas遊戲
- 畫素自走棋遊戲《魔塔少女》已正式上線遊戲
- 線上Linux伺服器優化經驗Linux伺服器優化
- WPS Office 2019已經上架Wind10應用商店
- 影改恐怖遊戲續作 《女鬼橋二 釋魂路》試玩版現已上線遊戲
- 國產戰棋遊戲《尼羅河勇士》公佈 試玩版現已上線Steam遊戲