使用supervisor+nginx+uwsgi管理Django项目

本文详细介绍了如何使用Supervisor进程管理工具来管理Django项目,包括Supervisor的安装、配置、设置开机启动,以及如何通过Supervisor管理uwsgi服务。通过具体的步骤和示例配置文件,帮助读者实现项目的稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用supervisor管理Django项目

supervisor安装

使用pip进行安装

pip install supervisor

创建默认的配置文件

echo_supervisord_conf > /etc/supervisord.conf

配置开机启动
在/etc/init.d/目录下创建supervisord文件

vi /etc/init.d/supervisord

拷贝以下内容到刚才创建的文件中,根据版本的不同可能要稍作修改

#!/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/python3

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

设置/etc/init.d/supervisord执行权限

chmod 777 /etc/init.d/supervisord

设置supervisor开机默认启动

chkconfig --add supervisord
chkconfig --level 345 supervisord on

在/etc/supervisord.conf的末尾加上,注意,一开始这两个语句的前面都是有分号的,一定要把分号去掉!!!我在这里就是没有去掉分号,搞了几个小时才发现错误!!!

[include]
files = /etc/supervisor/conf.d/*.conf

创建配置文件目录

mkdir /etc/supervisor/conf.d

安装配置完成之后,就开始来管理uwsgi

先创建一个配置文件

vim /etc/supervisor/conf.d/django_blog.conf

拷贝以下内容到配置文件中,根据个人的不同,command和directory会有所差异。

; ================================
;  uwsgi supervisor
; ================================

[program:myblog]

command=/usr/local/python3/bin/uwsgi --ini /home/project/blog/uwsgi.ini
directory=/home/project/blog

user=root
numprocs=1

stdout_logfile=/var/log/django/django_blog.log
stderr_logfile=/var/log/django/django_blog_err.log
autostart=true
autorestart=true
startsecs=10
priority=997

可以使用以下命令对supervisor进行操作

supervisord -c /etc/supervisord.conf # 指定启动文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值