从零部署 supervisor 维护 golang 进程

正为疯狂 · · 2259 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

golang supervisor

go准备工作

创建一个<demo>项目,里面main.go代码
代码摘自<Go Web 编程>

package main

import (
    "fmt"
    "log"
    "net/http"
    "strings"
)

func sayhelloName(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()       //解析参数,默认是不会解析的
    fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息
    fmt.Println("path", r.URL.Path)
    fmt.Println("scheme", r.URL.Scheme)
    fmt.Println(r.Form["url_long"])
    for k, v := range r.Form {
        fmt.Println("key:", k)
        fmt.Println("val:", strings.Join(v, ""))
    }
    fmt.Fprintf(w, "Hello astaxie!") //这个写入到w的是输出到客户端的
}

func main() {
    http.HandleFunc("/", sayhelloName)       //设置访问的路由
    err := http.ListenAndServe(":9090", nil) //设置监听的端口
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

go build
go install
本地测试通过之后把运行的demo包传至服务器

安装supervisor

官网地址
http://supervisord.org/index.html

sudo yum install python-setuptools
sudo easy_install supervisor

安装成功后 生成配置文件

sudo echo_supervisord_conf > /etc/supervisord.conf

这里很简单,如遇问题可以自己Google下

添加自己的配置文件

我也学网上在/etc/下面新建一个专门放 .conf 的文件夹,感觉这样很好,比一味修改supervisord.conf文件要更方便以后管理
我这命名
"supervisorconffile"
在supervisorconffile中新建个.conf文件
我的
demo.conf

[program:demo]
user=root
command=/root/Applications/Go/bin/demo
autostart=true
autorestart=true
startsecs=10
stdout_logfile=/root/Applications/LogFile/log/demo.log 
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile=/root/Applications/LogFile/err/demo.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
stopsignal=INT
[supervisord] 

说明

command:表示运行的命令,我这是填写的我demo安装包的原则路径。
autostart:表示是否跟随supervisor一起启动。
autorestart:如果该程序挂了,是否重新启动。
stdout_logfile:终端标准输出重定向文件。
stderr_logfile:终端错误输出重定向文件。

注意上面的两个log文件
/root/Applications/LogFile/log/demo.log
/root/Applications/LogFile/err/demo.log
都要在相应目录下面创建对应的log

修改配置文件

好了开始
编辑/etc/supervisord.conf

在文件最下面
刚打开是这样的

;[include]
;files = relative/directory/*.ini

改成这样

[include]
files = /etc/supervisorconffile/*.conf

注意[include]前面的';'要去掉,我在这点上耽误了点时间

启动

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

报错了
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.

网上查到执行下面两条命令可以解决

1.
find / -name supervisor.sock
2.
unlink /***/supervisor.sock

再次执行
sudo /usr/bin/supervisord -c /etc/supervisord.conf
启动成功
我这成功什么都没有打印输出反馈,没有反馈就是成功了没毛病了

可以输入命令查看下刚刚启动的demo服务是否是成功

sudo supervisorctl status demo

输出

demo                             STARTING 

查看状态 输入名录

supervisorctl

输出:

demo                             RUNNING   pid 4806, uptime 0:04:05

supervisor> help
用help查看帮助
输入exit退出


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:正为疯狂

查看原文:从零部署 supervisor 维护 golang 进程

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2259 次点击  ∙  1 赞  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传