uwsgi 시작 스 크 립 트 를 개선 하여 여러 개의 독립 프로필 을 지원 합 니 다.

3938 단어
최근 플 라 스 크 를 연구 하 다가 운영 환경 을 가설 하 는 데 어려움 을 겪 었 다.모든 독립 된 애플 리 케 이 션 을 NGINX 가 여러 사 이 트 를 처리 하 는 것 처럼 애플 리 케 이 션 마다 하나의 프로필 을 처리 하고 싶 기 때문이다.인터넷 에 떠 도 는 uwsgi 시작 스 크 립 트 는 하나의 프로필 만 지원 합 니 다.여러 애플 리 케 이 션 의 설정 을 시작 스 크 립 트 에 명령 으로 통합 할 수 있다 는 글 이 있 지만, 그렇게 하면 분명 유연성 이 부족 하 다.공식 문 서 를 보 니 머리 가 너무 커서 이리 저리 찾 아 봐 도 두서 가 없다.그래서 시작 스 크 립 트 를 개선 하기 로 했 습 니 다.원래 스 크 립 트 를 바탕 으로 프로필 을 추가 하여 가 져 오고 모든 프로필 을 반복 적 으로 처리 합 니 다.개조 난이도 가 크 지 않 지만 효과 가 좋아 서 나의 요 구 를 완벽 하 게 실현 했다.필요 한 사람 에 게 코드 를 붙 여 공유 합 니 다.물론 더 간편 한 방법 으로 목적 을 달성 할 수 있다 면 번 거 로 운 말씀 부탁드립니다.
특별 성명:
1. 스 크 립 트 는 INI 형식 프로필 의 불 러 오기 만 지원 합 니 다. 다른 형식 프로필 을 불 러 오 려 면 스 크 립 트 에 해당 하 는 위치 코드 를 스스로 수정 하 십시오.
2. PID 파일 이름 은 설정 파일 이름과 일치 하고 확장 자 는 pid 입 니 다.다 르 면 프로 세 스 가 정상적으로 닫 히 거나 다시 불 러 올 수 없습니다.
3. 스 크 립 트 이름 은 uwsgisvr 를 / etc / init. d / 디 렉 터 리 에 저장 하고 실행 권한 을 설정 하 십시오.
#!/bin/bash
# chkconfig: 2345 55 25
# Description: Startup script for uwsgi webserver on Debian. Place in /etc/init.d and
# run 'update-rc.d -f uwsgi defaults', or use the appropriate command on your
# distro. For CentOS/Redhat run: 'chkconfig --add uwsgi'

### BEGIN INIT INFO
# Provides:          uwsgi
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the uwsgi web server
# Description:       starts uwsgi using start-stop-daemon
### END INIT INFO

# Modify by lykyl
# Ver:1.1
# Description: script can loads multiple configs now.
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="uwsgi daemon"
NAME=uwsgi_srv
DAEMON=/usr/local/bin/uwsgi
CONFIGDIR=/etc/uwsgi/
PIDDIR=/var/run/
SCRIPTNAME=/etc/init.d/$NAME
FindCmd="/usr/bin/find"
declare -a iniList
declare -a SiteNameList

 
function Init() {
    iniList=`$FindCmd $CONFIGDIR -name '*.ini'`
    for i in ${iniList[@]}
    do
       SiteNameList=(${SiteNameList[@]} `basename $i|awk -F. '{print $1}'`)
    done
}

function Start() 
{
    local c=0
    for i in ${iniList[@]}
    do
      if $DAEMON $i; then
        echo "${SiteNameList[$c]} started"
      else
        echo "${SiteNameList[$c]} already running"
      fi
      let ++c
    done
}
 
function Stop() 
{
    local c=0
    for i in ${SiteNameList[@]}
    do
      if $DAEMON --stop ${PIDDIR}${i}.pid; then
        echo "${SiteNameList[$c]} stoped"
      else
        echo "${SiteNameList[$c]} not running"
      fi
      rm -f ${PIDDIR}${i}.pid
      let ++c
    done
}
 
function Reload() 
{
    local c=0
    for i in ${SiteNameList[@]}
    do
      if $DAEMON --reload ${PIDDIR}${i}.pid; then
        echo "${SiteNameList[$c]} reloaded"
      else
        echo "${SiteNameList[$c]} can't reload"
      fi
      let ++c
    done
}
 
function Status() 
{
    ps aux|grep $DAEMON
    echo
}

#main
set -e
[ -x "$DAEMON" ] || exit 0
Init
 
case "$1" in
 status)
    echo -en "Status $NAME: 
" Status ;; start) echo -en "Starting $NAME:
" Start ;; stop) echo -en "Stopping $NAME:
" Stop ;; reload|graceful) echo -en "Reloading $NAME:
" Reload ;; *) echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2 exit 3 ;; esac exit 0

좋은 웹페이지 즐겨찾기