golang supervisord

supervisor运行golang守护进程

安装supervisor

基于centos 6.4。python

supervisor使用python编写的,能够用easy_install安装。centos上默认有python的运行环境,安装起来就很是简单了。linux

$ sudo yum install python-setuptools
$ sudo easy_install supervisor

若是没有看到什么报错,那么就安装成功了,能够使用echo_supervisord_conf查看配置详情,然后生成配置文件。golang

$ sudo echo_supervisord_conf > /etc/supervisord.conf

golang http服务

先整一个简单的golang http服务centos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package  main
 
import  (
     "fmt"
     "log"
     "net/http"
)
 
func  main() {
     http.HandleFunc( "/" func (w http.ResponseWriter, r *http.Request) {
         fmt.Fprintf(w,  "Hello world" )
     })
 
     err := http.ListenAndServe( ":9090" , nil)
     if  err != nil {
         log.Fatal( "ListenAndServe: " , err)
     }
}

直接运行这个程序会占用住终端,下面看看如何用supervisor来跑这个程序。app

supervisor配置golang

编辑/etc/supervisord.conf,在最后增长运行程序设置ui

[program:golang-http-server]
command=/home/golang/simple_http_server
autostart=true
autorestart=true
startsecs=10
stdout_logfile=/var/log/simple_http_server.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile=/var/log/simple_http_server.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB

几个配置说明:spa

command:表示运行的命令,填入完整的路径便可。
autostart:表示是否跟随supervisor一块儿启动。
autorestart:若是该程序挂了,是否从新启动。
stdout_logfile:终端标准输出重定向文件。
stderr_logfile:终端错误输出重定向文件。rest

其他配置说明能够查看官方文档。日志

启动supervisor

$ sudo /usr/bin/supervisord -c /etc/supervisord.conf

若是出现什么问题,能够查看日志进行分析,日志文件路径/tmp/supervisord.logcode

tips:若是修改了配置文件,能够用kill -HUP从新加载配置文件

$ cat /tmp/supervisord.pid | xargs sudo kill -HUP

查看supervisor运行状态

$ supervisorctl
golang-http-server RUNNING pid 23307, uptime 0:02:55
supervisor>

输入help能够查看帮助

supervisor> help
default commands (type help ):
=====================================
add clear fg open quit remove restart start stop update
avail exit maintail pid reload reread shutdown status tail version

supervisor运行原理

supervisor运行后自己是守护进程,经过自身来管理相应的子进程,经过观察相应的进程状态就很明了了。

$ ps -ef | grep supervisord
root 23306 1 0 07:30 ? 00:00:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root 23331 23222 0 07:41 pts/0 00:00:00 grep supervisord

$ ps -ef | grep simple_http_server
root 23307 23306 0 07:30 ? 00:00:00 /home/golang/simple_http_server
root 23333 23222 0 07:41 pts/0 00:00:00 grep simple_http_server

能够很直观的看出golang simple_http_server进程是supervisord的子进程。

supervisor是否靠谱

supervisor的诞生已经10年了,如今是3+版本,因此放心使用吧。

参考

supervisor官网:http://supervisord.org/

关于守护进程之前在玩python的时候有写过其中实现的原理,详细能够参考:linux下python守护进程编写和原理理解

 

转自:https://studygolang.com/articles/4480

相关文章
相关标签/搜索