当前位置:   article > 正文

Supervisor 配置gunicorn以及设置开机自启动(centos6.5)_supervisor_gunicorn.conf 路径

supervisor_gunicorn.conf 路径

一. Supervisor安装及配置gunicorn

Supervisor 是一个客户端服务器系统,包含有两个程序:

  • Supervisor的server部分称为supervisord。主要负责管理子进程,响应客户端的命令,log子进程的输出,创建和处理不同的事件
  • Supervisor的命令行客户端supervisorctl。它可以与不同的supervisord进程进行通信,获取子进程信息,管理子进程
# Centos6.5下的Supervisor下载(最好用pip装,用yum下载的版本问题比较多)
# 用pip下载的版本(4.x)需要在python3.x版本下运行
pip install supervisor
  • 1
  • 2
  • 3

输入 echo_supervisord_conf 查看默认配置文件,如下:

; Sample supervisor config file.
;
; For more information on the config file, please see:
; http://supervisord.org/configuration.html
;
; Notes:
;  - Shell expansion ("~" or "$HOME") is not supported.  Environment
;    variables can be expanded using this syntax: "%(ENV_HOME)s".
;  - Quotes around values are not supported, except in the case of
;    the environment= options as shown below.
;  - Comments must have a leading space: "a=b ;comment" not "a=b;comment".
;  - Command will be truncated if it looks like a config file comment, e.g.
;    "command=bash -c 'foo ; bar'" will truncate to "command=bash -c 'foo ".
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

使用 echo_supervisord_conf > /etc/supervisord.conf 命令将配置文件保存在下面,然后修改配置文件。推荐的方式是修改配置文件路径到某个固定文件夹,如下:

[include]
files = /etc/supervisor/conf.d/*.ini
  • 1
  • 2

配置

[program:minnan_sys]
command=/usr/.envs/project/bin/gunicorn -c gunicorn.conf.py wsgi:app
directory=/project_dir
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=root
loglevel=info
stdout_logfile=/var/log/supervisor/project_stdout.log
stderr_logfile=/var/log/supervisor/project_stderr.log
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

启动supervisord

supervisord -c supervisord.conf # 指定配置文件启动supervisord
  • 1

启动supervisorctl

supervisorctl
  • 1

supervisorctl 常用命令

service supervisord start # 启动服务
service supervisord restart # 重启服务 

supervisorctl # 进入supervisorctl命令行并列出当前所有项目的运行状态
supervisorctl reread # 重新读取配置
supervisorctl update  # 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
supervisorctl stop program_name  # 停止某一个进程,program_name 为 [program:x] 里的 x
supervisorctl start program_name  # 启动某个进程
supervisorctl restart program_name  # 重启某个进程
supervisorctl stop all  # 停止全部进程upervisorctl reload  # 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

额外的设置(可选)

一. 非root用户也可使用supervisorctl

修改配置文件 /etc/supervisor.conf 的一个地方

[unix_http_server]
file=/var/run//supervisor.sock
chmod=0777  ; 原来是chmod=0700
  • 1
  • 2
  • 3

二. 设置 HTTP 服务

加入如下两行到 /etc/supervisord.conf 中

[inet_http_server]
port = :9001
  • 1
  • 2

supervisorctl reload 重新加载配置。打开浏览器输入 http://localhost:9001, 就会看到管理页面了,网页上的功能也很全。

(简洁)参考 链接
(详细)参考 链接

二. Supervisor配置开机启动

在centos和rhel的环境下,我们一般是用chkconfig来管理服务的启动停止、开机自启动等。下面我列出Supervisord的服务脚本。

1. 执行如下命令

vim /etc/init.d/supervisord
  • 1

2.输入如下内容

注意:该文件中的如下几个变量,都需要根据你实际的目录来改写。

PREFIX=/usr/local

SUPERVISORD=$PREFIX/bin/supervisord ##supervisord 程序的安装路径

SUPERVISORCTL=$PREFIX/bin/supervisorctl ##supervisorctl 程序的安装路径

PIDFILE=/var/supervisor/supervisord.pid ##需要先创建/var/supervisor目录

LOCKFILE=/var/supervisor/supervisord.lock

OPTIONS=”-c /etc/supervisord.conf” ##配置文件的路径

#!/bin/bash
#
# supervisord   This scripts turns supervisord on
# chkconfig:    345 83 04
# description:  supervisor is a process control utility.  It has a web based
#               xmlrpc interface as well as a few other nifty features.
#
 
# source function library
. /etc/rc.d/init.d/functions
 
set -a
 
PREFIX=/usr/local
 
SUPERVISORD=$PREFIX/bin/supervisord
SUPERVISORCTL=$PREFIX/bin/supervisorctl
 
PIDFILE=/var/supervisor/supervisord.pid
LOCKFILE=/var/supervisor/supervisord.lock
 
OPTIONS="-c /etc/supervisord.conf"
 
# unset this variable if you don't care to wait for child processes to shutdown before removing the $LOCKFILE-lock
WAIT_FOR_SUBPROCESSES=yes
 
# remove this if you manage number of open files in some other fashion
ulimit -n 96000
 
RETVAL=0
 
 
running_pid()
{
    # Check if a given process pid's cmdline matches a given name
    pid=$1
    name=$2
    [ -z "$pid" ] && return 1
    [ ! -d /proc/$pid ] && return 1
    (cat /proc/$pid/cmdline | tr "\000" "\n"|grep -q $name) || return 1
    return 0
}
 
running()
{
# Check if the process is running looking at /proc
# (works for all users)
 
    # No pidfile, probably no daemon present
    [ ! -f "$PIDFILE" ] && return 1
    # Obtain the pid and check it against the binary name
    pid=`cat $PIDFILE`
    running_pid $pid $SUPERVISORD || return 1
    return 0
}
 
start() {
        echo "Starting supervisord: "
 
        if [ -e $PIDFILE ]; then 
		echo "ALREADY STARTED"
		return 1
	fi
 
	# start supervisord with options from sysconfig (stuff like -c)
        $SUPERVISORD $OPTIONS
 
	# show initial startup status
	$SUPERVISORCTL $OPTIONS status
 
	# only create the subsyslock if we created the PIDFILE
        [ -e $PIDFILE ] && touch $LOCKFILE
}
 
stop() {
        echo -n "Stopping supervisord: "
        $SUPERVISORCTL $OPTIONS shutdown
	if [ -n "$WAIT_FOR_SUBPROCESSES" ]; then 
            echo "Waiting roughly 60 seconds for $PIDFILE to be removed after child processes exit"
            for sleep in  2 2 2 2 4 4 4 4 8 8 8 8 last; do
                if [ ! -e $PIDFILE ] ; then
                    echo "Supervisord exited as expected in under $total_sleep seconds"
                    break
                else
                    if [[ $sleep -eq "last" ]] ; then
                        echo "Supervisord still working on shutting down. We've waited roughly 60 seconds, we'll let it do its thing from here"
                        return 1
                    else
                        sleep $sleep
                        total_sleep=$(( $total_sleep + $sleep ))
                    fi
 
                fi
            done
        fi
 
        # always remove the subsys. We might have waited a while, but just remove it at this point.
        rm -f $LOCKFILE
}
 
restart() {
        stop
        start
}
 
case "$1" in
    start)
        start
        RETVAL=$?
        ;;
    stop)
        stop
        RETVAL=$?
        ;;
    restart|force-reload)
        restart
        RETVAL=$?
        ;;
    reload)
        $SUPERVISORCTL $OPTIONS reload
        RETVAL=$?
        ;;
    condrestart)
        [ -f $LOCKFILE ] && restart
        RETVAL=$?
        ;;
    status)
        $SUPERVISORCTL $OPTIONS status
        if running ; then
            RETVAL=0
        else
            RETVAL=1
        fi
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
        exit 1
esac
 
exit $RETVAL
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140

保存完毕之后,可以执行以下命令修改文件权限:

chmod 777 /etc/init.d/supervisord
  • 1

3. 配置开机启动

执行以下命令:

chkconfig supervisord  on
  • 1

可以以下命令查看是否成功

chkconfig --list | grep supervisord
  • 1

三. Supervisor的其它功能

supervisor event 链接
supervisor xml_rpc 链接

部分内容参考链接:
https://www.cnblogs.com/wswang/p/5795766.html
https://www.cnblogs.com/94cool/p/5952219.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/73048
推荐阅读
  

闽ICP备14008679号