文档章节

supervisor运行golang守护进程

Minho
 Minho
发布于 2016/07/09 10:51
字数 926
阅读 321
收藏 7

Supervisor是一个C/S系统,它可以在类UNIX系统上控制系统进程,由python编写,它提供了大量的功能来实现对进程的管理。

  • 程序的多进程启动,可以配置同时启动的进程数,而不需要一个个启动
  • 程序的退出码,可以根据程序的退出码来判断是否需要自动重启
  • 程序所产生日志的处理
  • 进程初始化的环境,包括目录,用户,umask,关闭进程所需要的信号等等
  • 手动管理进程(开始,启动,重启,查看进程状态)的web界面,和xmlrpc接口

支持的平台

  • 可以运行在大多数类UNIX系统上,比如Linux、MAC OS X、Solaris、FreeBSD。
  • 不支持任何版本的Windows。
  • 支持Python2.4以及之后的版本,但不支持Python3。

安装supervisor

  • pip
    pip install supervisor
  • easy_install
    easy_install supervisor
  • apt-get (Debian/Ubuntu)
    apt-get update
    apt-get install supervisor
    #默认配置文件在/etc/supervisor/supervisord.conf
  • yum (Centos)
    yum install supervisor

golang http服务

先整一个简单的golang http服务

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来跑这个程序。

supervisor配置golang

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

[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

几个配置说明:

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

其余配置说明可以查看官方文档。

启动supervisor

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

如果出现什么问题,可以查看日志进行分析,日志文件路径/tmp/supervisord.log

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的子进程。

常用命令

控制命令基本都通过supervisorctl执行,输入 help 可以看到命令列表。这是一些常用命令:

  • 获得所有程序状态 supervisorctl status
  • 关闭目标程序 supervisorctl stop spider
  • 启动目标程序 supervisorctl start spider
  • 关闭所有程序 supervisorctl shutdown

让 Supervisor 开机启动

echo "service supervisord start" >> /etc/rc.local

supervisor是否靠谱

supervisor的诞生已经10年了,现在是3+版本,所以放心使用吧。

参考

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

开机启动: https://github.com/Supervisor/initscripts 

本文转载自:http://www.01happy.com/supervisor-golang-daemon/

Minho
粉丝 28
博文 53
码字总数 31501
作品 3
青岛
程序员
私信 提问
加载中

评论(1)

zouqilin
zouqilin
不错 学习
利用supervisor在linux上部署goweb项目

最近在鼓捣golang守护进程的实现,无意发现了supervisor这个有意思的东西。supervisor是一个unix的系统进程管理软件,可以用它来管理apache、nginx等服务,若服务挂了可以让它们自动重启。当...

卐字旗下的余晖
2015/12/14
231
0
golang以服务方式运行

golang开发的二进制程序,一般需要长期后台运行的,在linux上可以用supervisor或upstart或systemd等第三方守护进程来实现。其实golang自己也可以实现以服务的形式常驻后台。 需要的库 https:...

Minho
2016/07/13
2.1K
2
Linux守护进程之Supervisor

什么是守护进程 在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在linux中,每个系统...

OneTODO
2016/10/31
134
0
supervisor用为golang后台创建守护进程

supervisor是一个unix的系统进程管理软件,可以用它来管理apache、nginx等服务,若服务挂了可以让它们自动重启。下面基于centos 6.6,描述下具体实现: sudo yum install python-setuptoolss...

ponpon_
2015/05/06
0
0
[喵咪Liunx(1)]计划任务队列脚本后台进程Supervisor帮你搞定

哈喽大家好啊,好久不见啊(都快一个月了),要问为什么没有更新博客呢只应为最近在录制PhalApi的视频教程时间比较少,作为弥补那么为大家带来一点干货Supervisor,话不多说那么就开始今天的分享把...

喵了_个咪
2016/04/24
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
今天
5
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
今天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
今天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
今天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
今天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部