技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统运维 --> 进程管理器supervisor的使用(django实例)

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

浏览:2532次  出处信息

   

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

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

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

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

   首先,shell下命令:

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

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

[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端口。

   -EOF-

建议继续学习:

  1. Linux内存点滴 用户进程内存空间    (阅读:11368)
  2. Oracle MTS模式下 进程地址与会话信息    (阅读:10004)
  3. 深入理解Nginx之调试优化技巧    (阅读:6747)
  4. Linux上进程的表示以及入门    (阅读:6343)
  5. Linux下进程绑定多CPU运行    (阅读:5747)
  6. 分析进程内存分配情况,解决程序性能问题    (阅读:5327)
  7. 使用django+celery+RabbitMQ实现异步执行    (阅读:5005)
  8. Linux下如何知道文件被那个进程写    (阅读:4959)
  9. 使用GDB调试多进程程序    (阅读:4887)
  10. Linux进程的层次关系    (阅读:4414)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1