博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
supervisor运行golang守护进程
阅读量:6891 次
发布时间:2019-06-27

本文共 2837 字,大约阅读时间需要 9 分钟。

  hot3.png

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 updateapt-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_serverautostart=trueautorestart=truestartsecs=10stdout_logfile=/var/log/simple_http_server.logstdout_logfile_maxbytes=1MBstdout_logfile_backups=10stdout_capture_maxbytes=1MBstderr_logfile=/var/log/simple_http_server.logstderr_logfile_maxbytes=1MBstderr_logfile_backups=10stderr_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运行状态

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

输入help可以查看帮助

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

supervisor运行原理

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

$ ps -ef | grep supervisordroot 23306 1 0 07:30 ? 00:00:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.confroot 23331 23222 0 07:41 pts/0 00:00:00 grep supervisord$ ps -ef | grep simple_http_serverroot 23307 23306 0 07:30 ? 00:00:00 /home/golang/simple_http_serverroot 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官网:

开机启动:  

转载于:https://my.oschina.net/idufei/blog/708795

你可能感兴趣的文章
《vSphere性能设计:性能密集场景下CPU、内存、存储及网络的最佳设计实践》一1.1 准备工作...
查看>>
[图] Google 迎来全新 Logo 启用无衬线字体
查看>>
《OSPF和IS-IS详解》一2.5 路径决策过程
查看>>
如何将 Vim 打造成一个成熟的 IDE
查看>>
Jquery动态添加行
查看>>
微软已修复危险异常的 NSA Shadow Brokers 漏洞
查看>>
《Adobe After Effects CS6中文版经典教程》——2.2 使用Adobe Bridge导入素材
查看>>
用 Freemarker 生成 word 文档
查看>>
SpriteBuilder —— 跨平台游戏开发工具
查看>>
python xpath selenium
查看>>
《VMware vSphere 6.0虚拟化架构实战指南》——2.4 全新安装后的必要配置
查看>>
《Oracle SQL疑难解析》——1.15 启用其他排序和比较选项
查看>>
Mysql Connector 5.1 好用的新特性
查看>>
移动App性能测评与优化2.2.4 优化方法四:云省电策略
查看>>
Java中Redis的使用教程
查看>>
从洞穴壁画说起,信息可视化图表发展的迷人历史
查看>>
《Web前端开发精品课 HTML与CSS进阶教程》——2.8 HTML5舍弃的标签
查看>>
4 个你需要了解的容器网络工具
查看>>
利用ModSecurity防御暴力破解
查看>>
《libGDX移动游戏开发从入门到精通》一1.2 搭建libGDX开发环境
查看>>