• supervisor安装部署和使用实例


    Supervisord是用Python实现的一款非常实用的进程管理工具,类似于monit,monit和supervisord的一个比较大的差异是supervisord管理的进程必须由supervisord来启动,monit可以管理已经在运行的程序;supervisord还要求管理的程序是非daemon程序,supervisord会帮你把它转成daemon程序,因此如果用supervisord来管理nginx的话,必须在nginx的配置文件里添加一行设置daemon off让nginx以非daemon方式启动。(此段话引用链接:http://feilong.me/2011/03/monitor-processes-with-supervisord)

    注意:如果用supervisorctlstart nginx启动nginx显示错误nginx: ERROR(abnormal termination),查看日志说是nginx已经启动,这就是因为nginx本身是daemon程序,要在nginx的配置文件中把它转为非daemon程序.

    1.Supervisor安装:

    1 # 安装  
    2 easy_install supervisor 

    也可采用离线安装的方式:

    安装python
    安装meld3-0.6.8.tar.gz

    安装elementtree-1.2.6-20050316.tar.gz
    安装supervisor-3.0a12.tar.gz

    官方安装文档:
    http://supervisord.org/installing.html

    依赖软件:

    1 setuptools (latest) from http://pypi.python.org/pypi/setuptools.  
    2 meld3 (latest) from http://www.plope.com/software/meld3/.  
    3 elementtree (latest) from http://effbot.org/downloads#elementtree.  
    2.生成默认配置文件:
    1 # 生成默认配置文件  
    2 echo_supervisord_conf > /etc/supervisord.conf  
    3 mkdir /etc/supervisord.conf.d  

    3.修改配置文件

    1 include区段修改为:  
    2 [include]  
    3 files = /etc/supervisord.conf.d/*.conf  
    1 如需要访问web控制界面,inet_http_server区段修改为:  
    2 [inet_http_server]  
    3 port=0.0.0.0:9001  
    4 username=username ; 你的用户名  
    5 password=password ; 你的密码  
     
    1 每个需要管理的进程分别写在一个文件里面,放在/etc/supervisord.conf.d/目录下,便于管理。例如:test.conf  
    2 [program:sqlparse]  
    3 directory = /var/local/python  
    4 command = /use/bin python test.py  
    
    

    4.把supervisord服务设为开机自启动,把下面程序复制下来生成supervisord文件放到/etc/init.d/目录下面:

    CentOS环境下:

     1 #!/bin/sh  
     2 #  
     3 # /etc/rc.d/init.d/supervisord  
     4 #  
     5 # Supervisor is a client/server system that  
     6 # allows its users to monitor and control a  
     7 # number of processes on UNIX-like operating  
     8 # systems.  
     9 #  
    10 # chkconfig: - 64 36  
    11 # description: Supervisor Server  
    12 # processname: supervisord  
    13   
    14 # Source init functions  
    15 . /etc/init.d/functions  
    16   
    17 RETVAL=0  
    18 prog="supervisord"  
    19 pidfile="/tmp/supervisord.pid"  
    20 lockfile="/var/lock/subsys/supervisord"  
    21   
    22 start()  
    23 {  
    24         echo -n $"Starting $prog: "  
    25         daemon --pidfile $pidfile supervisord -c /etc/supervisord.conf  
    26         RETVAL=$?  
    27         echo  
    28         [ $RETVAL -eq 0 ] && touch ${lockfile}  
    29 }  
    30   
    31 stop()  
    32 {  
    33         echo -n $"Shutting down $prog: "  
    34         killproc -p ${pidfile} /usr/bin/supervisord  
    35         RETVAL=$?  
    36         echo  
    37         if [ $RETVAL -eq 0 ] ; then  
    38                 rm -f ${lockfile} ${pidfile}  
    39         fi  
    40 }  
    41   
    42 case "$1" in  
    43   
    44   start)  
    45     start  
    46   ;;  
    47   
    48   stop)  
    49     stop  
    50   ;;  
    51   
    52   status)  
    53         status $prog  
    54   ;;  
    55   
    56   restart)  
    57     stop  
    58     start  
    59   ;;  
    60   
    61   *)  
    62     echo "Usage: $0 {start|stop|restart|status}"  
    63   ;;  
    64   
    65 esac  
     

    Ubuntu环境下:

      1 #! /bin/sh
      2 ### BEGIN INIT INFO
      3 # Provides:          supervisord
      4 # Required-Start:    $remote_fs
      5 # Required-Stop:     $remote_fs
      6 # Default-Start:     2 3 4 5
      7 # Default-Stop:      0 1 6
      8 # Short-Description: Example initscript
      9 # Description:       This file should be used to construct scripts to be
     10 #                    placed in /etc/init.d.
     11 ### END INIT INFO
     12  
     13 # Author: Dan MacKinlay <danielm@phm.gov.au>
     14 # Based on instructions by Bertrand Mathieu
     15 # http://zebert.blogspot.com/2009/05/installing-django-solr-varnish-and.html
     16  
     17 # Do NOT "set -e"
     18  
     19 # PATH should only include /usr/* if it runs after the mountnfs.sh script
     20 PATH=/sbin:/usr/sbin:/bin:/usr/bin
     21 DESC="Description of the service"
     22 NAME=supervisord
     23 DAEMON=/usr/local/bin/supervisord
     24 DAEMON_ARGS=""
     25 PIDFILE=/tmp/$NAME.pid
     26 SCRIPTNAME=/etc/init.d/$NAME
     27  
     28 # Exit if the package is not installed
     29 [ -x "$DAEMON" ] || exit 0
     30  
     31 # Read configuration variable file if it is present
     32 [ -r /etc/default/$NAME ] && . /etc/default/$NAME
     33  
     34 # Load the VERBOSE setting and other rcS variables
     35 . /lib/init/vars.sh
     36  
     37 # Define LSB log_* functions.
     38 # Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
     39 . /lib/lsb/init-functions
     40  
     41 #
     42 # Function that starts the daemon/service
     43 #
     44 do_start()
     45 {
     46     # Return
     47     #   0 if daemon has been started
     48     #   1 if daemon was already running
     49     #   2 if daemon could not be started
     50     start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null 
     51         || return 1
     52     start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- 
     53         $DAEMON_ARGS 
     54         || return 2
     55     # Add code here, if necessary, that waits for the process to be ready
     56     # to handle requests from services started subsequently which depend
     57     # on this one.  As a last resort, sleep for some time.
     58 }
     59  
     60 #
     61 # Function that stops the daemon/service
     62 #
     63 do_stop()
     64 {
     65     # Return
     66     #   0 if daemon has been stopped
     67     #   1 if daemon was already stopped
     68     #   2 if daemon could not be stopped
     69     #   other if a failure occurred
     70     start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
     71     RETVAL="$?"
     72     [ "$RETVAL" = 2 ] && return 2
     73     # Wait for children to finish too if this is a daemon that forks
     74     # and if the daemon is only ever run from this initscript.
     75     # If the above conditions are not satisfied then add some other code
     76     # that waits for the process to drop all resources that could be
     77     # needed by services started subsequently.  A last resort is to
     78     # sleep for some time.
     79     start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
     80     [ "$?" = 2 ] && return 2
     81     # Many daemons don't delete their pidfiles when they exit.
     82     rm -f $PIDFILE
     83     return "$RETVAL"
     84 }
     85  
     86 #
     87 # Function that sends a SIGHUP to the daemon/service
     88 #
     89 do_reload() {
     90     #
     91     # If the daemon can reload its configuration without
     92     # restarting (for example, when it is sent a SIGHUP),
     93     # then implement that here.
     94     #
     95     start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
     96     return 0
     97 }
     98  
     99 case "$1" in
    100   start)
    101     [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
    102     do_start
    103     case "$?" in
    104         0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    105         2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    106     esac
    107     ;;
    108   stop)
    109     [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
    110     do_stop
    111     case "$?" in
    112         0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    113         2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    114     esac
    115     ;;
    116   #reload|force-reload)
    117     #
    118     # If do_reload() is not implemented then leave this commented out
    119     # and leave 'force-reload' as an alias for 'restart'.
    120     #
    121     #log_daemon_msg "Reloading $DESC" "$NAME"
    122     #do_reload
    123     #log_end_msg $?
    124     #;;
    125   restart|force-reload)
    126     #
    127     # If the "reload" option is implemented then remove the
    128     # 'force-reload' alias
    129     #
    130     log_daemon_msg "Restarting $DESC" "$NAME"
    131     do_stop
    132     case "$?" in
    133       0|1)
    134         do_start
    135         case "$?" in
    136             0) log_end_msg 0 ;;
    137             1) log_end_msg 1 ;; # Old process is still running
    138             *) log_end_msg 1 ;; # Failed to start
    139         esac
    140         ;;
    141       *)
    142           # Failed to stop
    143         log_end_msg 1
    144         ;;
    145     esac
    146     ;;
    147   *)
    148     #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
    149     echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
    150     exit 3
    151     ;;
    152 esac 


    用root用户执行下面命令把supervisord服务设为开机自启动:

    CentOS系统下:

    1 chmod +x /etc/init.d/supervisord  
    2 chkconfig supervisord on  
    3 service supervisord start


    Ubuntu系统下:

    1 chmod +x /etc/init.d/supervisord  
    2 update-rc.d supervisord defaults

    5.supervisord管理

    Supervisord安装完成后有两个可用的命令行supervisor和supervisorctl,命令使用解释如下:

    • supervisord,初始启动Supervisord,启动、管理配置中设置的进程。
    • supervisorctl stop programxxx,停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。
    • supervisorctl start programxxx,启动某个进程
    • supervisorctl restart programxxx,重启某个进程
    • supervisorctl stop groupworker: ,重启所有属于名为groupworker这个分组的进程(start,restart同理)
    • supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
    • supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
    • supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
    • 注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。

    6.supervisord的配置文件(/etc/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 ; Note: shell expansion ("~" or "$HOME") is not supported.  Environment  
      7 ; variables can be expanded using this syntax: "%(ENV_HOME)s".  
      8   
      9 [unix_http_server]  
     10 file=/tmp/supervisor.sock   ; (the path to the socket file)  
     11 ;chmod=0700                 ; socket file mode (default 0700)  
     12 ;chown=nobody:nogroup       ; socket file uid:gid owner  
     13 ;username=user              ; (default is no username (open server))  
     14 ;password=123               ; (default is no password (open server))  
     15   
     16 ;[inet_http_server]         ; inet (TCP) server disabled by default  
     17 ;port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for all iface)  
     18 ;username=user              ; (default is no username (open server))  
     19 ;password=123               ; (default is no password (open server))  
     20   
     21 [inet_http_server]         ; inet (TCP) server disabled by default  
     22 port=0.0.0.0:9001        ; (ip_address:port specifier, *:port for all iface)  
     23 username=supervisor              ; (default is no username (open server))  
     24 password=supervisor               ; (default is no password (open server))  
     25   
     26 [supervisord]  
     27 logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)  
     28 logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)  
     29 logfile_backups=10           ; (num of main logfile rotation backups;default 10)  
     30 loglevel=info                ; (log level;default info; others: debug,warn,trace)  
     31 pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)  
     32 nodaemon=false               ; (start in foreground if true;default false)  
     33 minfds=1024                  ; (min. avail startup file descriptors;default 1024)  
     34 minprocs=200                 ; (min. avail process descriptors;default 200)  
     35 ;umask=022                   ; (process file creation umask;default 022)  
     36 ;user=chrism                 ; (default is current user, required if root)  
     37 ;identifier=supervisor       ; (supervisord identifier, default is 'supervisor')  
     38 ;directory=/tmp              ; (default is not to cd during start)  
     39 ;nocleanup=true              ; (don't clean up tempfiles at start;default false)  
     40 ;childlogdir=/tmp            ; ('AUTO' child log dir, default $TEMP)  
     41 ;environment=KEY="value"     ; (key value pairs to add to environment)  
     42 ;strip_ansi=false            ; (strip ansi escape codes in logs; def. false)  
     43   
     44 ; the below section must remain in the config file for RPC  
     45 ; (supervisorctl/web interface) to work, additional interfaces may be  
     46 ; added by defining them in separate rpcinterface: sections  
     47 [rpcinterface:supervisor]  
     48 supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface  
     49   
     50 [supervisorctl]  
     51 serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket  
     52 ;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket  
     53 ;username=chris              ; should be same as http_username if set  
     54 ;password=123                ; should be same as http_password if set  
     55 ;prompt=mysupervisor         ; cmd line prompt (default "supervisor")  
     56 ;history_file=~/.sc_history  ; use readline history if available  
     57   
     58 ; The below sample program section shows all possible program subsection values,  
     59 ; create one or more 'real' program: sections to be able to control them under  
     60 ; supervisor.  
     61   
     62 ;[program:theprogramname]  
     63 ;command=/bin/cat              ; the program (relative uses PATH, can take args)  
     64 ;process_name=%(program_name)s ; process_name expr (default %(program_name)s)  
     65 ;numprocs=1                    ; number of processes copies to start (def 1)  
     66 ;directory=/tmp                ; directory to cwd to before exec (def no cwd)  
     67 ;umask=022                     ; umask for process (default None)  
     68 ;priority=999                  ; the relative start priority (default 999)  
     69 ;autostart=true                ; start at supervisord start (default: true)  
     70 ;autorestart=unexpected        ; whether/when to restart (default: unexpected)  
     71 ;startsecs=1                   ; number of secs prog must stay running (def. 1)  
     72 ;startretries=3                ; max # of serial start failures (default 3)  
     73 ;exitcodes=0,2                 ; 'expected' exit codes for process (default 0,2)  
     74 ;stopsignal=QUIT               ; signal used to kill process (default TERM)  
     75 ;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)  
     76 ;stopasgroup=false             ; send stop signal to the UNIX process group (default false)  
     77 ;killasgroup=false             ; SIGKILL the UNIX process group (def false)  
     78 ;user=chrism                   ; setuid to this UNIX account to run the program  
     79 ;redirect_stderr=true          ; redirect proc stderr to stdout (default false)  
     80 ;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO  
     81 ;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)  
     82 ;stdout_logfile_backups=10     ; # of stdout logfile backups (default 10)  
     83 ;stdout_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)  
     84 ;stdout_events_enabled=false   ; emit events on stdout writes (default false)  
     85 ;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO  
     86 ;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)  
     87 ;stderr_logfile_backups=10     ; # of stderr logfile backups (default 10)  
     88 ;stderr_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)  
     89 ;stderr_events_enabled=false   ; emit events on stderr writes (default false)  
     90 ;environment=A="1",B="2"       ; process environment additions (def no adds)  
     91 ;serverurl=AUTO                ; override serverurl computation (childutils)  
     92   
     93 ; The below sample eventlistener section shows all possible  
     94 ; eventlistener subsection values, create one or more 'real'  
     95 ; eventlistener: sections to be able to handle event notifications  
     96 ; sent by supervisor.  
     97   
     98 ;[eventlistener:theeventlistenername]  
     99 ;command=/bin/eventlistener    ; the program (relative uses PATH, can take args)  
    100 ;process_name=%(program_name)s ; process_name expr (default %(program_name)s)  
    101 ;numprocs=1                    ; number of processes copies to start (def 1)  
    102 ;events=EVENT                  ; event notif. types to subscribe to (req'd)  
    103 ;buffer_size=10                ; event buffer queue size (default 10)  
    104 ;directory=/tmp                ; directory to cwd to before exec (def no cwd)  
    105 ;umask=022                     ; umask for process (default None)  
    106 ;priority=-1                   ; the relative start priority (default -1)  
    107 ;autostart=true                ; start at supervisord start (default: true)  
    108 ;autorestart=unexpected        ; whether/when to restart (default: unexpected)  
    109 ;startsecs=1                   ; number of secs prog must stay running (def. 1)  
    110 ;startretries=3                ; max # of serial start failures (default 3)  
    111 ;exitcodes=0,2                 ; 'expected' exit codes for process (default 0,2)  
    112 ;stopsignal=QUIT               ; signal used to kill process (default TERM)  
    113 ;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)  
    114 ;stopasgroup=false             ; send stop signal to the UNIX process group (default false)  
    115 ;killasgroup=false             ; SIGKILL the UNIX process group (def false)  
    116 ;user=chrism                   ; setuid to this UNIX account to run the program  
    117 ;redirect_stderr=true          ; redirect proc stderr to stdout (default false)  
    118 ;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO  
    119 ;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)  
    120 ;stdout_logfile_backups=10     ; # of stdout logfile backups (default 10)  
    121 ;stdout_events_enabled=false   ; emit events on stdout writes (default false)  
    122 ;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO  
    123 ;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)  
    124 ;stderr_logfile_backups        ; # of stderr logfile backups (default 10)  
    125 ;stderr_events_enabled=false   ; emit events on stderr writes (default false)  
    126 ;environment=A="1",B="2"       ; process environment additions  
    127 ;serverurl=AUTO                ; override serverurl computation (childutils)  
    128   
    129 ; The below sample group section shows all possible group values,  
    130 ; create one or more 'real' group: sections to create "heterogeneous"  
    131 ; process groups.  
    132   
    133 ;[group:thegroupname]  
    134 ;programs=progname1,progname2  ; each refers to 'x' in [program:x] definitions  
    135 ;priority=999                  ; the relative start priority (default 999)  
    136   
    137 ; The [include] section can just contain the "files" setting.  This  
    138 ; setting can list multiple files (separated by whitespace or  
    139 ; newlines).  It can also contain wildcards.  The filenames are  
    140 ; interpreted as relative to this file.  Included files *cannot*  
    141 ; include files themselves.  
    142   
    143 ;[include]  
    144 ;files = relative/directory/*.ini  
    145   
    146 [include]  
    147 files = /etc/supervisord.conf.d/*.conf  
     

    7.管理实例

    7.1.测试一个简单的python程序:

    在/etc/supervisord.conf.d/目录下生成testsupervisor.conf文件

    1 [program:testsupervisor]  
    2 directory = /opt/testsupervisor  
    3 command = /usr/local/bin/python testsupervisor.py  
    4 priority=1  
    5 numprocs=1  
    6 autostart=true  
    7 autorestart=true  

    directory表示testsupervisor.py所在的工作目录

    command表示执行的命令,注意python要用绝对路径:/usr/local/bin/python

    priority表示优先级,用supervisord管理的程序会按优先级从高到低依次启动,数字越多,优先级越高

    autostart表示自动启动

    autorestart表示自动重启

    7.2.用supervisord管理 redis程序:

    在/etc/supervisord.conf.d/目录下生成redis.conf文件

     1 [program:redis]  
     2 directory=/usr/local/src/redis-2.6.16  
     3 command=/usr/local/src/redis-2.6.16/src/redis-server redis.conf  
     4   
     5 stdout_logfile=/tmp/redis_access.log  
     6 stderr_logfile=/tmp/redis_error.log  
     7 autostart=true  
     8 autorestart=true  
     9 startsecs=10  
    10   
    11 ; Need to wait for currently executing tasks to finish at shutdown.  
    12 ; Increase this if you have very long running tasks.  
    13 stopwaitsecs = 600  
    14   
    15 ; if rabbitmq is supervised, set its priority higher  
    16 ; so it starts first  
    17 priority=10  


    7.3.用supervisord管理nginx程序,因为nginx默认就是以daemon方式启动的,所以如果用supervisord来管理nginx的话,必须在nginx的配置文件里添加一行设置daemon off让nginx以非daemon方式启动。(supervisord还要求管理的程序是非daemon程序,supervisord会帮你把它转成daemon程序)

    在/usr/local/nginx/conf/目录下面修改nginx.conf文件:

     
     1 worker_processes 2;  
     2 daemon off;  
     3 events {  
     4 #use epoll;  
     5 worker_connections 1024;  
     6 }  
     7 http{  
     8         #gzip on;  
     9         #gzip_min_length  100;  
    10         #gzip_buffers     4 16k;  
    11         #gzip_http_version 1.0;  
    12         #gzip_comp_level 2;  
    13         #gzip_types       text/plain application/x-javascript text/css application/xml;  
    14         #gzip_vary on;  
    15   
    16         upstream 192.168.56.11 {  
    17         #这里指定多个源服务器,ip:端口,80端口的话可写可不写    
    18                 server 127.0.0.1:8003;  
    19                 server 127.0.0.1:8004;  
    20                 server 127.0.0.1:8005;  
    21                 server 127.0.0.1:8006;  
    22   
    23         }  
    24         server {  
    25                 listen 8010;  
    26                 location / {  
    27                         #rewrite ^/smmp/servletsendmoremsg.do$ /send last;  
    28                         proxy_redirect off;  
    29                         proxy_set_header Host    $host;  
    30                         proxy_set_header X-Forwarded-For $remote_addr;  
    31                         proxy_pass http://192.168.56.11;  
    32   
    33                 }  
    34   
    35         }  
    36   
    37 #       server {  
    38 #               listen 443;  
    39 #                ssl                  on;  
    40 #               ssl_certificate      server.crt;  
    41 #               ssl_certificate_key  server.key;  
    42 #  
    43 #               ssl_session_timeout  5m;  
    44 #  
    45 #               ssl_protocols  SSLv2 SSLv3 TLSv1;  
    46 #               ssl_ciphers  HIGH:!aNULL:!MD5;  
    47 #               ssl_prefer_server_ciphers   on;  
    48 #               location / {  
    49 #                        proxy_redirect off;  
    50 #                        proxy_set_header Host    $host;  
    51 #                        proxy_set_header X-Forwarded-For $remote_addr;  
    52 #                        proxy_pass http://192.168.56.11;  
    53 #  
    54 #                }  
    55 #                 
    56 #       }    
    57 }  

    在/etc/supervisord.conf.d/目录下生成nginx.conf文件

     1 [program:nginx]  
     2 command=/usr/local/nginx/sbin/nginx  
     3   
     4 stdout_logfile=/tmp/nginx.log  
     5 stderr_logfile=/tmp/nginx.log  
     6 autostart=true  
     7 autorestart=true  
     8 startsecs=10  
     9   
    10 ; Need to wait for currently executing tasks to finish at shutdown.  
    11 ; Increase this if you have very long running tasks.  
    12 stopwaitsecs = 600  
    13   
    14 ; if rabbitmq is supervised, set its priority higher  
    15 ; so it starts first  
    16 priority=55  

    7.4.用supervisord管理celery服务(python环境下):

    celery官方链接:https://github.com/celery/celery/tree/3.0/extra/supervisord

    在/etc/supervisord.conf.d/目录下生成celeryd.conf文件,启了两个worker,配置文件中要注意celeryconfig.py的路径:

     1 ; ============================  
     2 ;  celeryd supervisor example  
     3 ; ============================  
     4   
     5 ; NOTE: If you're using Django, you shouldn't use this file.  
     6 ; Use  
     7 ; http://github.com/celery/django-celery/tree/master/extra/supervisord/celeryd.conf  
     8 ; instead!  
     9   
    10 [program:celery]  
    11 command=/usr/local/bin/celery worker --loglevel INFO --queues=low_send_task_queue,high_send_task_queue  
    12   
    13 process_name = %(program_name)s-%(process_num)d  
    14   
    15 ; Set PYTHONPATH to the directory containing celeryconfig.py  
    16 environment=PYTHONPATH=/usr/local/workspace_eclipse3.7.2/venus  
    17   
    18 directory=/usr/local/workspace_eclipse3.7.2/venus  
    19   
    20 numprocs=2  
    21 stdout_logfile=/tmp/celery_sendsms_access.log  
    22 stderr_logfile=/tmp/celery_sendsms_error.log  
    23 autostart=true  
    24 autorestart=true  
    25 startsecs=10  
    26   
    27 ; Need to wait for currently executing tasks to finish at shutdown.  
    28 ; Increase this if you have very long running tasks.  
    29 stopwaitsecs = 600  
    30   
    31 ; if rabbitmq is supervised, set its priority higher  
    32 ; so it starts first  
    33 priority=998  


    7.5.用supervisord管理celery服务(django环境下):

    在/etc/supervisord.conf.d/目录下生成celeryd_worker.conf文件

     1 ; ==============================================  
     2 ;  celery worker supervisor example for Django  
     3 ; ==============================================  
     4   
     5 [program:celeryworker]  
     6 command=/usr/local/bin/python manage.py celery worker --loglevel=INFO --queues=db_write_back_queue  
     7 directory=/usr/local/workspace_eclipse3.7.2/sms_web  
     8   
     9 numprocs=1  
    10 stdout_logfile=/tmp/celeryworker.log  
    11 stderr_logfile=/tmp/celeryworker.log  
    12 autostart=true  
    13 autorestart=true  
    14 startsecs=10  
    15   
    16 ; Need to wait for currently executing tasks to finish at shutdown.  
    17 ; Increase this if you have very long running tasks.  
    18 stopwaitsecs = 600  
    19   
    20 ; if rabbitmq is supervised, set its priority higher  
    21 ; so it starts first  
    22 priority=15  
    23   
    24 ;process_name = %(program_name)s-%(process_num)d  
    25 ;numprocs=2  

    在/etc/supervisord.conf.d/目录下生成celeryd_beat.conf文件,django环境下的心跳服务

     
     1 ; ==============================================  
     2 ;  celery worker supervisor example for Django  
     3 ; ==============================================  
     4   
     5 [program:celerybeat]  
     6 command=/usr/local/bin/python manage.py celery beat -s /var/log/sms_web/celerybeat-schedule --loglevel=INFO  
     7 directory=/usr/local/workspace_eclipse3.7.2/sms_web  
     8   
     9 numprocs=1  
    10 stdout_logfile=/tmp/celerybeat.log  
    11 stderr_logfile=/tmp/celerybeat.log  
    12 autostart=true  
    13 autorestart=true  
    14 startsecs=10  
    15   
    16 ; Need to wait for currently executing tasks to finish at shutdown.  
    17 ; Increase this if you have very long running tasks.  
    18 stopwaitsecs = 600  
    19   
    20 ; if rabbitmq is supervised, set its priority higher  
    21 ; so it starts first  
    22 priority=14  
    23   
    24 ;process_name = %(program_name)s-%(process_num)d  
    25 ;numprocs=2  
     

    7.6.用supervisord管理venus服务(启了四个进程):

    在/etc/supervisord.conf.d/目录下生成venux.conf文件

     1 [program:venus-8003]  
     2 directory=/usr/local/workspace_eclipse3.7.2/venus  
     3 command=/usr/local/bin/python main.py --port=8003  
     4 stdout_logfile=/tmp/venus_8003.log  
     5 stderr_logfile=/tmp/venus_8003.log  
     6 autostart=true  
     7 autorestart=true  
     8 priority=50  
     9   
    10 [program:venus-8004]  
    11 directory=/usr/local/workspace_eclipse3.7.2/venus  
    12 command=/usr/local/bin/python main.py --port=8004  
    13 stdout_logfile=/tmp/venus_8004.log  
    14 stderr_logfile=/tmp/venus_8004.log  
    15 autostart=true  
    16 autorestart=true  
    17 priority=51  
    18   
    19 [program:venus-8005]  
    20 directory=/usr/local/workspace_eclipse3.7.2/venus  
    21 command=/usr/local/bin/python main.py --port=8005  
    22 stdout_logfile=/tmp/venus_8005.log  
    23 stderr_logfile=/tmp/venus_8005.log  
    24 autostart=true  
    25 autorestart=true  
    26 priority=52  
    27   
    28 [program:venus-8006]  
    29 directory=/usr/local/workspace_eclipse3.7.2/venus  
    30 command=/usr/local/bin/python main.py --port=8006  
    31 stdout_logfile=/tmp/venus_8006.log  
    32 stderr_logfile=/tmp/venus_8006.log  
    33 autostart=true  
    34 autorestart=true  
    35 priority=53  
    36 ~        

    7.7.用supervisord管理接收短信的服务:

    在/etc/supervisord.conf.d/目录下生成receiver_cmpp.conf文件

     1 [program:receiver-cmpp]  
     2 directory=/usr/local/workspace_eclipse3.7.2/sms_tool  
     3 command=/usr/local/bin/python receiver_cmpp.py  
     4   
     5 stdout_logfile=/tmp/receiver_cmpp.log  
     6 stderr_logfile=/tmp/receiver_cmpp.log  
     7 autostart=true  
     8 autorestart=true  
     9 startsecs=10  
    10   
    11 ; Need to wait for currently executing tasks to finish at shutdown.  
    12 ; Increase this if you have very long running tasks.  
    13 stopwaitsecs = 600  
    14   
    15 ; if rabbitmq is supervised, set its priority higher  
    16 ; so it starts first  
    17 priority=21  

    在/etc/supervisord.conf.d/目录下添加新的配置文件后,执行命令:

    1 supervisorctl update  


    就会把新添加的服务启动起来,且不会影响正在运行的 服务。 

  • 相关阅读:
    jvm的几个概念误区
    JDK动态代理和CGLib动态代理的对比
    mybatis源码解析(连载)
    HashMap源码解析(基于JDK1.8)
    线程池ThreadPoolExecutor——Worker源码解析
    Java线程池原理分析
    装饰器模式在mybatis-cache包中的应用
    rocketMQ手动创建Topic
    JVM误区--动态对象年龄判定
    云上奈飞(三):隐藏在播放按钮下的奥秘(上)
  • 原文地址:https://www.cnblogs.com/dengshihuang/p/8330296.html
Copyright © 2020-2023  润新知