进程管理器supervisor的使用(django实例)
Supervisor是一个多进程管理工具,在python生产环境中使用很频繁。它是由python实现的,在github上可以找到它的源码。
在目前的使用中,个人觉得最重要的就是同时启动多个应用,至于在网上看到的其他人说所的,在程序crash之后会自动重启,这是它有的功能不过在真实使用中还没碰到程序crash的情况。
常见的情景是这样,用supervisor启动多个django或者tornado程序,分别监听在不同的端口上。然后前面用一个nginx打到这几个端口。这样你访问监听在80端口的nginx的时候其实访问的是后面的几个django或者tornado程序,至于这样算不算是负载均衡,目前the5fire还没有搞清楚。不管怎样吧,这个东西就是这么用的。
下面就来具体说下supervisor的安装和配置(我是ubuntu12.04环境)。
首先,shell下命令:
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
但是在一开始接触的时候,标准配置文件中的东西实在是太多,不如把程序给弄起来先。因此我的配置文件是这样的:
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端口。
-EOF-
建议继续学习:
- Linux内存点滴 用户进程内存空间 (阅读:11368)
- Oracle MTS模式下 进程地址与会话信息 (阅读:10004)
- 深入理解Nginx之调试优化技巧 (阅读:6747)
- Linux上进程的表示以及入门 (阅读:6343)
- Linux下进程绑定多CPU运行 (阅读:5747)
- 分析进程内存分配情况,解决程序性能问题 (阅读:5327)
- 使用django+celery+RabbitMQ实现异步执行 (阅读:5005)
- Linux下如何知道文件被那个进程写 (阅读:4959)
- 使用GDB调试多进程程序 (阅读:4887)
- Linux进程的层次关系 (阅读:4414)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:胡阳 来源: the5fire的技术博客
- 标签: django supervisor 进程
- 发布时间:2013-07-31 13:32:23
- [68] Go Reflect 性能
- [68] 如何拿下简短的域名
- [67] Oracle MTS模式下 进程地址与会话信
- [62] IOS安全–浅谈关于IOS加固的几种方法
- [61] 图书馆的世界纪录
- [60] 【社会化设计】自我(self)部分――欢迎区
- [58] android 开发入门
- [56] 视觉调整-设计师 vs. 逻辑
- [49] 给自己的字体课(一)——英文字体基础
- [48] 读书笔记-壹百度:百度十年千倍的29条法则