Linux下多進程管理工具對開發和運維都頗有用,常見的功能全面的主流工具主要有monit、supervisor。不過開發中使用則推薦輕量級小工具goreman。git
goreman是對Ruby下普遍使用的foreman的重寫,畢竟基於golang的工具簡單易用多了。順便提一句:goreman的做者是mattn,在golang社區挺活躍的日本的一名程序員。foreman原做者也實現了一個golang版:forego,不過沒有goreman好用,舉個例子:coreos的etcd就是使用的goreman來一鍵啓停單機版的etcd集羣。程序員
go工具安裝都很是簡單:github
go get github.com/mattn/goreman goreman help
固然,記得先把GOPATH、GOROOT環境變量配置好,並記得把$GOPATH/bin添加到$PATHgolang
因爲是小工具,參考goreman help基本就足夠了。簡單的使用步驟:web
新建一個Procfile文件,若是更名則須要goreman -f指定。apache
在包含Procfile的目錄下執行:goreman start後端
關閉時直接ctrl-c推出,goreman會自動把全部啓動的進程都shut downbash
以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.properties broker: bash ~/tool/kafka_2.11-0.8.2.1/bin/kafka-server-start.sh config/server.properties
而後執行goreman start,能夠看到不一樣顏色區分的zookeeper、kafka broker進程的啓動日誌:session
11:04:10 zookeeper | Starting zookeeper on port 5000 11:04:10 broker | Starting broker on port 5001 ...
關閉時,直接ctrl-c,則兩個bash進程也會被自動關閉。
上述是最簡單的使用場景:直接使用goreman start,不過有個缺點,即goreman綁定到了當前的session,並且不能靈活控制多個進程啓停以及順序。而實際開發過程當中,一般須要常常單獨啓停某個正在開發的模塊相關的進程,好比上面例子中的kafka-broker,而Zookeeper一般不須要頻繁啓停。
可使用更高級的goreman run命令來實現,如:
# 先啓動Zookeeper goreman run start zookeeper # 而後啓動kafka goreman run start broker # 查看進程狀態 goreman run status # 中止broker進程 goreman run stop broker # 重啓broker進程 goreman run restart broker
多進程管理是目前開發尤爲是互聯網web、服務器後端很經常使用的工具,尤爲上雲以後,雲應用廣泛推崇的microservices微服務架構進一步增長了後端進程數。而goreman很適合開發環境使用,可以一鍵式管理多個後臺進程,並及時清理環境。不過真正的生產環境,仍是使用monit/m、supervisor等更成熟穩定、功能全面的多進程管理工具。