多进程管理工具:goreman

Linux下多进程管理工具对开发和运维都颇有用,常见的功能全面的主流工具主要有monit、supervisor。不过开发中使用则推荐轻量级小工具goremangit

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

  1. 新建一个Procfile文件,若是更名则须要goreman -f指定。apache

  2. 在包含Procfile的目录下执行:goreman start后端

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