go web项目linux发布,利用supervisor在linux上部署goweb项目

最近在鼓捣golang守护进程的实现,无心发现了supervisor这个有意思的东西。supervisor是一个unix的系统进程管理软件,能够用它来管理apache、nginx等服务,若服务挂了可让它们自动重启。固然也能够用来实现golang的守护进程,下面描述下具体实现。 python

安装supervisor

基于centos 6.4。 nginx

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

$ sudo yum install python-setuptools

$ sudo easy_install supervisor

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

$ 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

packagemain

import(

"fmt"

"log"

"net/http"

)

funcmain() {

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

fmt.Fprintf(w, "Hello world")

})

err := http.ListenAndServe(":9090", nil)

iferr != nil {

log.Fatal("ListenAndServe: ", err)

}

}

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

supervisor配置golang

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

[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

几个配置说明: unix

command:表示运行的命令,填入完整的路径便可。

autostart:表示是否跟随supervisor一块儿启动。

autorestart:若是该程序挂了,是否从新启动。

stdout_logfile:终端标准输出重定向文件。

stderr_logfile:终端错误输出重定向文件。 rest

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

启动supervisor

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

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

tips:

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

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

2.如何运行失败多是因为文件没有执行权限,则须要赋予文件执行权限

chmod 777 filename

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值