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.
  1. 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. 每个需要管理的进程分别写在一个文件里面,放在/etc/supervisord.conf.d/目录下,便于管理。例如:test.conf
  2. [program:sqlparse]
  3. directory = /var/local/python
  4. command = /use/bin python test.py
  1.  

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: -
  11. # description: Supervisor Server
  12. # processname: supervisord
  13.  
  14. # Source init functions
  15. . /etc/init.d/functions
  16.  
  17. RETVAL=
  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 ] && 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 ] ; 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
  1.  

Ubuntu环境下:

  1. #! /bin/sh
  2. ### BEGIN INIT INFO
  3. # Provides: supervisord
  4. # Required-Start: $remote_fs
  5. # Required-Stop: $remote_fs
  6. # Default-Start:
  7. # Default-Stop:
  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= ; socket file mode (default )
  12. ;chown=nobody:nogroup ; socket file uid:gid owner
  13. ;username=user ; (default is no username (open server))
  14. ;password= ; (default is no password (open server))
  15.  
  16. ;[inet_http_server] ; inet (TCP) server disabled by default
  17. ;port=127.0.0.1: ; (ip_address:port specifier, *:port for all iface)
  18. ;username=user ; (default is no username (open server))
  19. ;password= ; (default is no password (open server))
  20.  
  21. [inet_http_server] ; inet (TCP) server disabled by default
  22. port=0.0.0.0: ; (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= ; (num of main logfile rotation backups;default )
  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= ; (min. avail startup file descriptors;default )
  34. minprocs= ; (min. avail process descriptors;default )
  35. ;umask= ; (process file creation umask;default )
  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= ; 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= ; number of processes copies to start (def )
  66. ;directory=/tmp ; directory to cwd to before exec (def no cwd)
  67. ;umask= ; umask for process (default None)
  68. ;priority= ; the relative start priority (default )
  69. ;autostart=true ; start at supervisord start (default: true)
  70. ;autorestart=unexpected ; whether/when to restart (default: unexpected)
  71. ;startsecs= ; number of secs prog must stay running (def. )
  72. ;startretries= ; max # of serial start failures (default )
  73. ;exitcodes=, ; 'expected' exit codes for process (default ,)
  74. ;stopsignal=QUIT ; signal used to kill process (default TERM)
  75. ;stopwaitsecs= ; max num secs to wait b4 SIGKILL (default )
  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= ; # of stdout logfile backups (default )
  83. ;stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default )
  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= ; # of stderr logfile backups (default )
  88. ;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default )
  89. ;stderr_events_enabled=false ; emit events on stderr writes (default false)
  90. ;environment=A="",B="" ; 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= ; number of processes copies to start (def )
  102. ;events=EVENT ; event notif. types to subscribe to (req'd)
  103. ;buffer_size= ; event buffer queue size (default )
  104. ;directory=/tmp ; directory to cwd to before exec (def no cwd)
  105. ;umask= ; umask for process (default None)
  106. ;priority=- ; the relative start priority (default -)
  107. ;autostart=true ; start at supervisord start (default: true)
  108. ;autorestart=unexpected ; whether/when to restart (default: unexpected)
  109. ;startsecs= ; number of secs prog must stay running (def. )
  110. ;startretries= ; max # of serial start failures (default )
  111. ;exitcodes=, ; 'expected' exit codes for process (default ,)
  112. ;stopsignal=QUIT ; signal used to kill process (default TERM)
  113. ;stopwaitsecs= ; max num secs to wait b4 SIGKILL (default )
  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= ; # of stdout logfile backups (default )
  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 )
  125. ;stderr_events_enabled=false ; emit events on stderr writes (default false)
  126. ;environment=A="",B="" ; 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= ; the relative start priority (default )
  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
  1.  

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=
  5. numprocs=
  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.
  3. command=/usr/local/src/redis-2.6./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.  
  11. ; Need to wait for currently executing tasks to finish at shutdown.
  12. ; Increase this if you have very long running tasks.
  13. stopwaitsecs =
  14.  
  15. ; if rabbitmq is supervised, set its priority higher
  16. ; so it starts first
  17. priority=

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. daemon off;
  3. events {
  4. #use epoll;
  5. worker_connections ;
  6. }
  7. http{
  8. #gzip on;
  9. #gzip_min_length ;
  10. #gzip_buffers 16k;
  11. #gzip_http_version 1.0;
  12. #gzip_comp_level ;
  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:;
  19. server 127.0.0.1:;
  20. server 127.0.0.1:;
  21. server 127.0.0.1:;
  22.  
  23. }
  24. server {
  25. listen ;
  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 ;
  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=
  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 =
  13.  
  14. ; if rabbitmq is supervised, set its priority higher
  15. ; so it starts first
  16. priority=

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=
  21. stdout_logfile=/tmp/celery_sendsms_access.log
  22. stderr_logfile=/tmp/celery_sendsms_error.log
  23. autostart=true
  24. autorestart=true
  25. startsecs=
  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 =
  30.  
  31. ; if rabbitmq is supervised, set its priority higher
  32. ; so it starts first
  33. priority=

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=
  10. stdout_logfile=/tmp/celeryworker.log
  11. stderr_logfile=/tmp/celeryworker.log
  12. autostart=true
  13. autorestart=true
  14. startsecs=
  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 =
  19.  
  20. ; if rabbitmq is supervised, set its priority higher
  21. ; so it starts first
  22. priority=
  23.  
  24. ;process_name = %(program_name)s-%(process_num)d
  25. ;numprocs=

在/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=
  10. stdout_logfile=/tmp/celerybeat.log
  11. stderr_logfile=/tmp/celerybeat.log
  12. autostart=true
  13. autorestart=true
  14. startsecs=
  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 =
  19.  
  20. ; if rabbitmq is supervised, set its priority higher
  21. ; so it starts first
  22. priority=
  23.  
  24. ;process_name = %(program_name)s-%(process_num)d
  25. ;numprocs=
  1.  

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

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

  1. [program:venus-]
  2. directory=/usr/local/workspace_eclipse3.7.2/venus
  3. command=/usr/local/bin/python main.py --port=
  4. stdout_logfile=/tmp/venus_8003.log
  5. stderr_logfile=/tmp/venus_8003.log
  6. autostart=true
  7. autorestart=true
  8. priority=
  9.  
  10. [program:venus-]
  11. directory=/usr/local/workspace_eclipse3.7.2/venus
  12. command=/usr/local/bin/python main.py --port=
  13. stdout_logfile=/tmp/venus_8004.log
  14. stderr_logfile=/tmp/venus_8004.log
  15. autostart=true
  16. autorestart=true
  17. priority=
  18.  
  19. [program:venus-]
  20. directory=/usr/local/workspace_eclipse3.7.2/venus
  21. command=/usr/local/bin/python main.py --port=
  22. stdout_logfile=/tmp/venus_8005.log
  23. stderr_logfile=/tmp/venus_8005.log
  24. autostart=true
  25. autorestart=true
  26. priority=
  27.  
  28. [program:venus-]
  29. directory=/usr/local/workspace_eclipse3.7.2/venus
  30. command=/usr/local/bin/python main.py --port=
  31. stdout_logfile=/tmp/venus_8006.log
  32. stderr_logfile=/tmp/venus_8006.log
  33. autostart=true
  34. autorestart=true
  35. priority=
  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.  
  11. ; Need to wait for currently executing tasks to finish at shutdown.
  12. ; Increase this if you have very long running tasks.
  13. stopwaitsecs =
  14.  
  15. ; if rabbitmq is supervised, set its priority higher
  16. ; so it starts first
  17. priority=

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

  1. supervisorctl update

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

supervisor安装部署和使用实例的更多相关文章

  1. supervisor安装部署文档和管理实例

    Supervisord是用Python实现的一款非常实用的进程管理工具,类似于monit(关于monit见我的博客:用monit监控系统关键进程),monit和supervisord的一个比较大的差异 ...

  2. SparkR安装部署及数据分析实例

    1. SparkR的安装配置 1.1.       R与Rstudio的安装 1.1.1.           R的安装 我们的工作环境都是在Ubuntu下操作的,所以只介绍Ubuntu下安装R的方法 ...

  3. .NetCore 分布式日志收集Exceptionless 在Windows下本地安装部署及应用实例

    自己安装时候遇到很多问题,接下来把这些问题写出来希望对大家有所帮助 搭建环境: 1.下载安装 java 8 SDK (不要安装最新的10.0) 并配置好环境变量(环境变量的配置就不做介绍了) 2.下载 ...

  4. CentOS下SparkR安装部署:hadoop2.7.3+spark2.0.0+scale2.11.8+hive2.1.0

    注:之前本人写了一篇SparkR的安装部署文章:SparkR安装部署及数据分析实例,当时SparkR项目还没正式入主Spark,需要自己下载SparkR安装包,但现在spark已经支持R接口,so更新 ...

  5. supervisor的安装部署及集群管理

    supervisor的安装部署及集群管理 supervisor官网:http://www.supervisord.org/ 参考链接: http://blog.csdn.net/xyang81/art ...

  6. Linux平台oracle 11g单实例 + ASM存储 安装部署 快速参考

    操作环境:Citrix虚拟化环境中申请一个Linux6.4主机(模板)目标:创建单机11g + ASM存储 数据库 1. 主机准备 2. 创建ORACLE 用户和组成员 3. 创建以下目录并赋予对应权 ...

  7. 使用docker安装部署Spark集群来训练CNN(含Python实例)

    使用docker安装部署Spark集群来训练CNN(含Python实例) http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器 ...

  8. Linux平台Oracle 12.1.0.2 单实例安装部署

    主题:Linux平台Oracle 12.1.0.2 单实例安装部署 环境:RHEL 6.5 + Oracle 12.1.0.2 需求:安装部署OEM 13.2需要Oracle 12.1.0.2版本作为 ...

  9. .Net Core Linux部署之进程守护 Supervisor 安装配置

    1.Supervisor 安装 //安装easy_install yum install python-setuptools //安装Supervisor easy_install superviso ...

随机推荐

  1. BZOJ1018 SHOI2008堵塞的交通(线段树)

    动态图的连通性当然是可以用LCT维护的.但这相当的不优美,毕竟这样做没有用到任何该图的性质,LCT自带的大常数也会使其跑得非常慢. 考虑用线段树维护区间左右端四个点之间各自的连通性(仅经过该区间内路径 ...

  2. 如何解决每次打开office 都会出现正在配置的问题

    原因:安装offiece的时候直接选择以前安装过的office文件夹,导致文件冲突 解决方法:卸载,然后对准备要安装的文件夹清空或者重新建个新文件夹安装

  3. 【刷题】LOJ 6014 「网络流 24 题」最长 k 可重区间集

    题目描述 给定实直线 \(L\) 上 \(n\) 个开区间组成的集合 \(I\) ,和一个正整数 \(k\) ,试设计一个算法,从开区间集合 \(I\) 中选取出开区间集合 \(S \subseteq ...

  4. 【题解】 [SCOI2011]糖果 (差分约束)

    懒得复制,戳我戳我 Solution: 首先考虑\(X=1\)的情况,我们其实只用用一下并查集把相等的点合为一个点 然后后面的四个式子我们就可以用差分约束了,就拿\(X=2\)的情况来说吧,我们用\( ...

  5. P3232 [HNOI2013]游走 解题报告

    P3232 [HNOI2013]游走 题目描述 一个无向连通图,顶点从\(1\)编号到\(N\),边从\(1\)编号到\(M\). 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概 ...

  6. AIO 开始不定时的抛异常: java.io.IOException: 指定的网络名不再可用

    一天里会抛出几个这样的错误,但发现服务还在正常的运行. java.io.IOException: 指定的网络名不再可用. at sun.nio.ch.Iocp.translateErrorToIOEx ...

  7. mes平台的一些方法

    1.打开的一个缓存的页面的代码 $.openPane({ "width":"1500px",     "height":"1000 ...

  8. linux man命令

    http://note.youdao.com/noteshare?id=98878258c6453f92117355deba8b8439

  9. Zabbix应用八:Zabbix监控MongoDB

    利用Zabbix监控MongoDB 一.首先介绍mongodb采集到的数据含义: 1.状态采集命令: >db.serverStatus(); 2.输出内容: { "host" ...

  10. python 获取自身ip

    原文 见过很多获取服务器本地IP的代码,个人觉得都不是很好,例如以下这些 不推荐:靠猜测去获取本地IP方法 #!/usr/bin/env python # -*- coding: utf-8 -*- ...