zoukankan      html  css  js  c++  java
  • supervisord进程管理工具小结

    前言

        昨天临近下班,发现业务队列处理不及时,正好想到不久之前,上了一个新功能:通过队列异步转发微信消息。可能是消息太多了处理不过来,没怎么多想,处理不过来了,多增加处理进程就可以了,后来发现自己so young了 >_<!启动处理进程,必须先安装进程管理工具,比较出名的有supervisord,使用python语言实现。折腾了近半小时,后来发现自己不可能在短时间内搞定这个事情,业务上用户消息没有得到及时回复,需要快速处理,最后还是寻求公司大神帮助安装其它前端机的supervisord。为了学会安装以及使用这个神器,为了以后碰到这样的问题可以自己搞定,在测试机上尝试安装了这个神器,于是有了这篇总结的文章。

    查看依赖python模块是否安装(只安装没有的依赖包)

    1 [root@mtest3 ~]# python -u -c "help('modules')" > a.log
    2 [root@mtest3 ~]# cat a.log | grep element
    3 [root@mtest3 ~]# cat a.log | grep meld
    4 [root@mtest3 ~]# cat a.log | grep setuptool

    先安装依赖包
    1.elementtree-1.2.6-20050316.tar.gz

    1 [root@mtest3 Supervisord]# tar -xvf elementtree-1.2.6-20050316.tar.gz 
    2 [root@mtest3 Supervisord]# cd elementtree-1.2.6-20050316
    3 [root@mtest3 elementtree-1.2.6-20050316]# python setup.py install

    2.meld3-0.6.5.tar.gz

    1 [root@mtest3 Supervisord]# tar -xvf meld3-0.6.5.tar.gz 
    2 [root@mtest3 Supervisord]# cd meld3-0.6.5
    3 [root@mtest3 meld3-0.6.5]# python setup.py install

    3.setuptools-20.2.2.tar.gz

    1 [root@mtest3 Supervisord]# tar -xvf setuptools-20.2.2.tar.gz
    2 [root@mtest3 Supervisord]# cd setuptools-20.2.2
    3 [root@mtest3 setuptools-20.2.2]# python setup.py install

    3.安装supervisord

    1 [root@mtest3 Supervisord]# tar -xvf supervisor-3.2.2.tar.gz 
    2 [root@mtest3 Supervisord]# cd supervisor-3.2.2
    3 [root@mtest3 supervisor-3.2.2]# python setup.py install
    4 
    5 Installing echo_supervisord_conf script to /usr/bin
    6 Installing pidproxy script to /usr/bin
    7 Installing supervisorctl script to /usr/bin
    8 Installing supervisord script to /usr/bin

    生成配置文件

     1 [root@mtest3 ~]# echo_supervisord_conf > /u01/server/supervisord/conf/supervisord.conf 

    设置

     1 ; Sample supervisor config file.
     2 ;
     3 ; For more information on the config file, please see:
     4 ; http://supervisord.org/configuration.html
     5 ;
     6 
     7 [unix_http_server]
     8 file=/u01/server/supervisord/temp/supervisor.sock ; (the path to the socket file)
     9 
    10 [supervisord]
    11 logfile=/u01/server/supervisord/logs/supervisord.log ; (main log file;default $CWD/supervisord.log)
    12 logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
    13 logfile_backups=10 ; (num of main logfile rotation backups;default 10)
    14 loglevel=info ; (log level;default info; others: debug,warn,trace)
    15 pidfile=/u01/server/supervisord/temp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    16 nodaemon=false ; (start in foreground if true;default false)
    17 minfds=1024 ; (min. avail startup file descriptors;default 1024)
    18 minprocs=200 ; (min. avail process descriptors;default 200)
    19 
    20 ; the below section must remain in the config file for RPC
    21 ; (supervisorctl/web interface) to work, additional interfaces may be
    22 ; added by defining them in separate rpcinterface: sections
    23 [rpcinterface:supervisor]
    24 supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    25 
    26 [supervisorctl]
    27 serverurl=unix:///u01/server/supervisord/temp/supervisor.sock ; use a unix:// URL for a unix socket
    28 
    29 ; The below sample program section shows all possible program subsection values,
    30 ; create one or more 'real' program: sections to be able to control them under
    31 ; supervisor.
    32 
    33 [program:wx_front]
    34 command=/u01/server/php/bin/php /u01/server/apps/wechat/artisan queue:listen --queue=wxqueue --timeout=60 --delay=3 --memory=128 --sleep=3 --tries=0 --env=test ; the program (relative uses PATH, can take args)
    35 process_name=%(program_name)s ; process_name expr (default %(program_name)s)
    36 numprocs=2 ; number of processes copies to start (def 1)
    37 ;directory=/tmp ; directory to cwd to before exec (def no cwd)
    38 ;umask=022 ; umask for process (default None)
    39 ;priority=999 ; the relative start priority (default 999)
    40 autostart=true ; start at supervisord start (default: true)
    41 startsecs=3 ; # of secs prog must stay up to be running (def. 1)
    42 startretries=3 ; max # of serial start failures when starting (default 3)
    43 ;autorestart=unexpected ; when to restart if exited after running (def: unexpected)
    44 ;exitcodes=0,2 ; 'expected' exit codes used with autorestart (default 0,2)
    45 ;stopsignal=QUIT ; signal used to kill process (default TERM)
    46 ;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10)
    47 ;stopasgroup=false ; send stop signal to the UNIX process group (default false)
    48 ;killasgroup=false ; SIGKILL the UNIX process group (def false)
    49 user=daemon ; setuid to this UNIX account to run the program
    50 ;redirect_stderr=true ; redirect proc stderr to stdout (default false)
    51 stdout_logfile=/u01/server/supervisord/logs/wx_front_stdout.log ; stdout log path, NONE for none; default AUTO
    52 stdout_logfile_maxbytes=50MB ; max # logfile bytes b4 rotation (default 50MB)
    53 stdout_logfile_backups=5 ; # of stdout logfile backups (default 10)
    54 ;stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
    55 ;stdout_events_enabled=false ; emit events on stdout writes (default false)
    56 stderr_logfile=/u01/server/supervisord/logs/wx_front_stderr.log ; stderr log path, NONE for none; default AUTO
    57 stderr_logfile_maxbytes=50MB ; max # logfile bytes b4 rotation (default 50MB)
    58 ;stderr_logfile_backups=10 ; # of stderr logfile backups (default 10)
    59 ;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
    60 ;stderr_events_enabled=false ; emit events on stderr writes (default false)
    61 ;environment=A="1",B="2" ; process environment additions (def no adds)
    62 ;serverurl=AUTO ; override serverurl computation (childutils)
    63 
    64 [program:wx_admin]
    65 command=/u01/server/php/bin/php /u01/server/apps/admin/artisan queue:listen --queue=wx_queue_admin --timeout=60 --delay=3 --memory=128 --sleep=3 --tries=0 --env=test ; the program (relative uses PATH, can take args)
    66 process_name=%(program_name)s ; process_name expr (default %(program_name)s)
    67 numprocs=2 ; number of processes copies to start (def 1)
    68 autostart=true ; start at supervisord start (default: true)
    69 startsecs=3 ; # of secs prog must stay up to be running (def. 1)
    70 startretries=3 ; max # of serial start failures when starting (default 3)
    71 user=daemon ; setuid to this UNIX account to run the program
    72 stdout_logfile=/u01/server/supervisord/logs/wx_admin_stdout.log ; stdout log path, NONE for none; default AUTO
    73 stdout_logfile_maxbytes=50MB ; max # logfile bytes b4 rotation (default 50MB)
    74 stdout_logfile_backups=5 ; # of stdout logfile backups (default 10)
    75 stderr_logfile=/u01/server/supervisord/logs/wx_admin_stderr.log ; stderr log path, NONE for none; default AUTO
    76 stderr_logfile_maxbytes=50MB ; max # logfile bytes b4 rotation (default 50MB)

    开机自启动
    /etc/rc.local
    supervisord -c /u01/server/supervisord/conf/supervisord.conf

    手动启动
    supervisord -c /u01/server/supervisord/conf/supervisord.conf

    进程管理
    1.进入cli终端

    [root@mtest3 logs]# supervisorctl -c /u01/server/supervisord/conf/supervisord.conf
    supervisor> 

    2.查看进程状态

    1 supervisor> status
    2 wx_admin:0 RUNNING pid 26305, uptime 0:07:42
    3 wx_admin:1 RUNNING pid 26304, uptime 0:07:42
    4 wx_front:0 RUNNING pid 26307, uptime 0:07:42
    5 wx_front:1 RUNNING pid 26306, uptime 0:07:42

    3.重启superivsord服务(更改配置之后)

    supervisor> reload
    Really restart the remote supervisord process y/N? y
    Restarted supervisord

    4.关闭进程

    1 supervisor> stop all
    2 wx_admin:1: stopped
    3 wx_admin:0: stopped
    4 wx_front:1: stopped
    5 wx_front:0: stopped

    5.启动进程

    1 supervisor> start all
    2 wx_admin:1: started
    3 wx_admin:0: started
    4 wx_front:1: started
    5 wx_front:0: started

    6.查看命令行帮助(支持的命令,以及用法)

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

    7.退出

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

    备注
    1.配置key value必须至少包含一个空格再跟上 ; 注释符号

    后记

    看起来安装这个很简单,实际操作过之后,还是碰到一些意外的坑,而这些坑只有实际操作过才能发现:)

    参考资料
    [1] supervisord官网
    http://supervisord.org/index.html

    [2] supervisor github

    https://github.com/Supervisor/supervisor/releases

    [3] elementtree-1.2.6-20050316
    http://effbot.org/downloads#elementtree

    [4] meld3-0.6.5
    http://www.plope.com/software/meld3/

    [5] setuptools-20.2.2
    https://pypi.python.org/pypi/setuptools#downloads

    作者:WadeYu
    出处:http://www.cnblogs.com/wadeyu/
    本文版权归本人和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    架构设计中的方法学——迭代设计
    架构重构改善既有代码的设计
    架构如何为业务和技术“服务”(2)
    架构如何为业务和技术“服务”(1)
    选用面向领域的多层分布式架构(DDD风格架构)的理由
    传话游戏(2013编程之美全国挑战赛资格赛)
    2012年蓝桥杯软件设计大赛河南省初赛试题和答案
    最大值最下化
    NYOJ120 校园网络(强连通缩点targan算法)
    NYOJ176整数划分(二)
  • 原文地址:https://www.cnblogs.com/wadeyu/p/5280450.html
Copyright © 2011-2022 走看看