這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Linux下多進程管理工具對開發和營運都很有用,常見的功能全面的主流工具主要有monit、supervisor。不過開發中使用則推薦輕量級小工具goreman。
goreman是對Ruby下廣泛使用的foreman的重寫,畢竟基於golang的工具簡單易用多了。順便提一句:goreman的作者是mattn,在golang社區挺活躍的日本的一名程式員。foreman原作者也實現了一個golang版:forego,不過沒有goreman好用,舉個例子:coreos的etcd就是使用的goreman來一鍵啟停單機版的etcd叢集。
安裝
go工具安裝都非常簡單:
go get github.com/mattn/goremangoreman help
當然,記得先把GOPATH、GOROOT環境變數配置好,並記得把$GOPATH/bin添加到$PATH
使用
由於是小工具,參考goreman help基本就足夠了。簡單的使用步驟:
建立一個Procfile檔案,如果改名則需要goreman -f指定。
在包含Procfile的目錄下執行:goreman start
關閉時直接ctrl-c推出,goreman會自動把所有啟動的進程都shut down
舉例
以Apache kafka的使用為例,瞭解的朋友應該知道,kafka使用時通常需要啟動兩個進程:一個zookeeper,一個kafka broker,因此可以編寫一個kafka開發環境的Procfile:
zookeeper: bash ~/tool/kafka_2.11-0.8.2.1/bin/zookeeper-server-start.sh config/zookeeper.propertiesbroker: bash ~/tool/kafka_2.11-0.8.2.1/bin/kafka-server-start.sh config/server.properties
然後執行goreman start,可以看到不同顏色區分的zookeeper、kafka broker進程的開機記錄:
11:04:10 zookeeper | Starting zookeeper on port 500011:04:10 broker | Starting broker on port 5001...
關閉時,直接ctrl-c,則兩個bash進程也會被自動關閉。
進階用法
上述是最簡單的使用情境:直接使用goreman start,不過有個缺點,即goreman綁定到了當前的session,而且不能靈活控制多個進程啟停以及順序。而實際開發過程中,通常需要經常單獨啟停某個正在開發的模組相關的進程,比如上面例子中的kafka-broker,而Zookeeper通常不需要頻繁啟停。
可以使用更進階的goreman run命令來實現,如:
# 先啟動Zookeepergoreman run start zookeeper# 然後啟動kafkagoreman run start broker# 查看進程狀態goreman run status# 停止broker進程goreman run stop broker# 重啟broker進程goreman run restart broker
總結
多進程管理是目前開發尤其是互連網web、伺服器後端很常用的工具,尤其上雲之後,雲應用普遍推崇的microservices微服務架構進一步增加了後端進程數。而goreman很適合開發環境使用,能夠一鍵式管理多個後台進程,並及時清理環境。不過真正的生產環境,還是使用monit/m、supervisor等更成熟穩定、功能全面的多進程管理工具。