前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >进程管理器supervisor的使用(django实例)

进程管理器supervisor的使用(django实例)

作者头像
the5fire
发布2019-02-28 17:16:12
2K0
发布2019-02-28 17:16:12
举报

Supervisor是一个多进程管理工具,在python生产环境中使用很频繁。它是由python实现的,在github上可以找到它的源码。

在目前的使用中,个人觉得最重要的就是同时启动多个应用,至于在网上看到的其他人说所的,在程序crash之后会自动重启,这是它有的功能不过在真实使用中还没碰到程序crash的情况。

常见的情景是这样,用supervisor启动多个django或者tornado程序,分别监听在不同的端口上。然后前面用一个nginx打到这几个端口。这样你访问监听在80端口的nginx的时候其实访问的是后面的几个django或者tornado程序,至于这样算不算是负载均衡,目前the5fire还没有搞清楚。不管怎样吧,这个东西就是这么用的。

下面就来具体说下supervisor的安装和配置(我是ubuntu12.04环境)。

首先,shell下命令:

代码语言:javascript
复制
mkvirtualenv super
cd ~/.virtualenvs/super

这段命令的作用是创建一个虚拟环境super,然后跳到这个目录下。不了解内情的到这里先补下基础:《使用virtualenv创建虚拟python环境》

然后就是安装supervisor以及django:pip install supervisor django。

好,现在环境就初始化好了,先在super环境的etc下创建一个django项目,命名为sayhello:django-admin.py startproject sayhello。

然后就是配置supervisor的配置文件了。

根据官方指示,要执行下名的命令来创建配置文件:

echo_supervisord_conf > etc/supervisord.conf

但是在一开始接触的时候,标准配置文件中的东西实在是太多,不如把程序给弄起来先。因此我的配置文件是这样的:

代码语言:javascript
复制
[unix_http_server]
file=~/.virtualenvs/super/tmp/supervisor.sock                       ; path to your socket file
chmod=0777                 ; socket file mode (default 0700)
sockchown=root:the5fire       ; socket file uid:gid owner
username=user              ; (default is no username (open server))
password=123               ; (default is no password (open server))

[supervisord]
logfile=~/.virtualenvs/super/tmp/supervisord.log                    ; supervisord log file
logfile_maxbytes=50MB                           ; maximum size of logfile before rotation
logfile_backups=10                              ; number of backed up logfiles
loglevel=debug                                   ; info, debug, warn, trace
pidfile=~/.virtualenvs/super/tmp/supervisord.pid                    ; pidfile location
nodaemon=false                                  ; run supervisord as a daemon
minfds=1024                                     ; number of startup file descriptors
minprocs=200                                    ; number of process descriptors
#user=root                                   ; default user
#childlogdir=~/.virtualenvs/super/logs

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix://~/.virtualenvs/super/tmp/supervisor.sock           ; use a unix:// URL  for a unix socket
username=user
password=123

[program:sayhello]
command=/home/the5fire/.virtualenvs/super/bin/python /home/the5fire/.virtualenvs/super/etc/sayhello/manage.py runserver 800%(process_num)1d --noreload
process_name=%(program_name)s_%(process_num)d
autostart=true
stdout_logfile= ~/.virtualenvs/super/logs/supervisord_stdout_%(process_num)02d.log
numprocs=2
numprocs_start=0

各个参数的意思都很明确,其中有几个需要着重解释下,在配置的过程中the5fire卡壳在这里。

一开始的时候设置sock文件的拥有者的时候用:chown=root:the5fire,启动失败,安居提示修改为:sockchown=root:the5fire方成功,貌似the5fire:the5fire也可以,看文档说是用户和用户组。

后面还有一点要说明的就是端口的配置,在[program]配置项中,有两个参数numprocs=2,numprocs_start=0用来配置启动进程数和启动进程号。这样就有一个变量可以使用了:process_num,它就用来表示当前进程号。

在[program]项中还有一个command,就是要执行的程序。

这个配置总的目的是启动前面创建的那个django程序,分别监听在8000和8001端口。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-12-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档