美文网首页Golang程序员首页投稿(暂停使用,暂停投稿)
在CentOS7上用Supervisor运行Golang守护进程

在CentOS7上用Supervisor运行Golang守护进程

作者: 技术学习 | 来源:发表于2016-07-14 11:52 被阅读2987次

    安装pip

    下载pip安装文件并执行安装

    • 下载文件
    [root@snails ~]# wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
    
    • 执行安装
    [root@snails ~]# python get-pip.py
    [root@snails ~]# pip -V
    pip 8.1.2 from /usr/lib/python2.7/site-packages (python 2.7)
    

    设置pip国内aliyun源

    • 创建或修改配置文件
    linux ~/.pip/pip.conf
    windows %HOMEPATH%\pip\pip.ini
    
    • 修改内容
    [global]  
    index-url = http://mirrors.aliyun.com/pypi/simple/  
    
      [install]
    trusted-host=mirrors.aliyun.com  
    
    • 更新pip到最新版本
    [root@snails ~]# pip install -U pip
    
    • 查看已安装的库
    [root@snails ~]# pip list
    

    安装supervisor

    安装

    [root@snails ~]# pip install supervisor
    

    安装成功便可以拥有Supervisor,如果没有启动脚本,可以从 这里 下载一份,放置到 /usr/lib/systemd/system 或 /etc/systemd/system 目录(后者优先级更高)下面便可。

    [root@snails ~]# wget https://raw.githubusercontent.com/Supervisor/initscripts/master/centos-systemd-etcs -O /usr/lib/systemd/system/systemd-supervisor.service
    

    配置

    通过Supervisor附送的贴心的小脚本生成默认的配置文件

    [root@snails ~]# echo_supervisord_conf > /etc/supervisord.conf
    

    我们可以根据需要修改里面的配置。我这里,每个不同的项目,使用了一个单独的配置的文件,放置在 /etc/supervisor/下面,于是修改 /etc/supervisord.conf ,加上如下内容:

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

    创建golang http服务

    为了测试方便,我这里用一个最简单的golang http服务。

    [root@snails ~]# vi ~/simple_http_server.go
    
    package main
    
     import (
        "fmt"
        "log"
        "net/http"
    )
    
     func main() {
        http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
            fmt.Fprintf(w, "Hello world\n")
        })
    
        err := http.ListenAndServe(":9090", nil)
        if err != nil {
            log.Fatal("ListenAndServe: ", err)
        }
    }
    

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

    创建golang服务对应的supervisor配置文件

    vi /etc/supervisor/golang.conf
    [program:golang-http-server]
    command=/root/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

    [root@snails ~]# /usr/bin/supervisord -c /etc/supervisord.conf
    

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

    tips:如果修改了配置文件,可以用kill -HUP重新加载配置文件

    [root@snails ~]# cat /tmp/supervisord.pid | xargs sudo kill -HUP
    

    查看supervisor运行状态

    [root@snails ~]# supervisorctl
    golang-http-server               RUNNING   pid 30343, uptime 0:00:55
    

    * 输入help可以查看帮助

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

    supervisor运行原理

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

    [root@snails ~]# ps -ef | grep supervisord
    root     30269     1  0 11:31 ?        00:00:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
    [root@snails ~]# ps -ef | grep simple_http_server
    root     30343 30269  0 11:45 ?        00:00:00 /root/simple_http_server
    

    可以很直观的看出golang simple_http_server进程是supervisord的子进程。

    supervisor是否靠谱

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

    升级Supervisor

    升级Supervisor也是非常简单的,使用 pip install --upgrade supervisor
    既可以更新程序,然后使用 systemctl restart systemd-supervisor
    重启一下,就可以升级完成。

    验证

    [root@snails ~]# systemctl enable systemd-supervisor
    [root@snails ~]# systemctl status systemd-supervisor
    [root@snails ~]# curl localhost:9090
    Hello world
    

    相关文章

      网友评论

        本文标题:在CentOS7上用Supervisor运行Golang守护进程

        本文链接:https://www.haomeiwen.com/subject/rpsejttx.html