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等更成熟稳定、功能全面的多进程管理工具。