最近在研究flask,在架设运行环境的时候犯了难。因为我想把每个独立的应用像NGINX处理多个网站那样,每个应用单独一个配置文件。而网上流传的uwsgi启动脚本都只支持单个配置文件。虽然有文章说可以把多个应用的配置写成命令集成到启动脚本里,但那样的话显然不够灵活。官方文档看了头实在是大,找来找去也没个头绪。于是决定自己把启动脚本改进一下。在原来脚本的基础上加入了配置文件遍历获取,再循环处理每个配置文件。改造难度不大效果却很好,完美实现我的需求。现将代码贴出来分享给有需要的人。当然如果您有更简便的方法能达到目的,还请劳烦告之一声。

特别声明:

1、 脚本只支持INI格式配置文件的加载,如需要加载其他格式配置文件请自行修改脚本中对应位置代码。

2、 PID文件名要求与配置文件名一致,扩展名为pid。如果不一样会导致进程不能正常关闭或重新加载。

3、 脚本命名为uwsgi_svr保存到/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: \n"
   Status
;;
start)
echo -en "Starting $NAME: \n"
Start
;;
stop)
echo -en "Stopping $NAME: \n"
Stop
;;
reload|graceful)
echo -en "Reloading $NAME: \n"
Reload
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2
exit 3
;;
esac exit 0

  

改进uwsgi启动脚本,使其支持多个独立配置文件的更多相关文章

  1. uwsgi 启动脚本 每隔三小时重启

    针对 s10ops项目 来进行的重启 [root@ayibang-server scripts]# cat /home/liujianzuo/server/scripts/monitor_uwsgi ...

  2. Ubuntu 16.04 server版本开机启动脚本不支持

    Ubuntu16.04开机启动的脚本一直不支持,错误用在将开机启动脚本放到了home/usr/的目录下,应该放到/root才能正常启动.#!/bin/sh -e ## rc.local## This ...

  3. init进程 && 解析Android启动脚本init.rc && 修改它使不启动android && init.rc中启动一个sh文件

    Android启动后,系统执行的第一个进程是一个名称为init 的可执行程序.提供了以下的功能:设备管理.解析启动脚本.执行基本的功能.启动各种服务.代码的路径:system/core/init,编译 ...

  4. Linux Runlevel 启动 脚本

    Linux 操作系统自从开始启动至启动完毕需要经历几个不同的阶段,这几个阶段就叫做 Runlevel,同样,当Linux操作系统关闭时也要经历另外几个不同的 Runlevel,下面详细介绍一下 Run ...

  5. 短网址资料-nginx非root用户启动-systemctl启动脚本-分割root权限

    https://www.cnblogs.com/aspnethot/articles/3492191.htmlhttps://www.cnblogs.com/aspnethot/articles/34 ...

  6. Caterpillar的启动以及自动化启动脚本

    Caterpillar的启动以及自动化启动脚本 Caterpillar是基于以太坊的BPMS,建模的BPMN图形可被Caterpillar转化为solidity程序部署到以太坊中. Caterpill ...

  7. etcd v3版本生产级集群搭建以及实现一键启动脚本

    本专栏的上一篇文章写了<长篇图解etcd核心应用场景及编码实战>,本文继续.后续计划章节内容如下: <长篇图解etcd核心应用场景及编码实战> <搭建高可用etcd集群& ...

  8. 不错的linux下通用的java程序启动脚本

    不错的linux下通用的java程序启动脚本(转载) 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的 ...

  9. Selenium2学习-005-WebUI自动化实战实例-003-三种浏览器(Chrome、Firefox、IE)启动脚本源代码

    此文主要通过 三种浏览器(Chrome.Firefox.IE)启动脚本 功能,进行 Selenium2 三种浏览器启动方法的实战实例讲解.文中所附源代码于 2015-01-18 20:33 亲测通过, ...

随机推荐

  1. Hadoop学习笔记—12.MapReduce中的常见算法

    一.MapReduce中有哪些常见算法 (1)经典之王:单词计数 这个是MapReduce的经典案例,经典的不能再经典了! (2)数据去重 "数据去重"主要是为了掌握和利用并行化思 ...

  2. .NET Memory Profiler 查看内存使用情况

    1 简介 .Net Memory Profiler(以下简称Profiler):专门针对于.NET程序,功能最全的内存分析工具,最大的特点是具有内存动态分析(Automatic Memory Anal ...

  3. 《深入理解 java虚拟机》学习笔记

    java内存区域详解 以下内容参考自<深入理解 java虚拟机 JVM高级特性与最佳实践>,其中图片大多取自网络与本书,以供学习和参考.

  4. Red Gate(SQLToolbelt)SQL Server的安装与注册(破解)

    Red Gate(SQLToolbelt)是SQL Server辅佐工具 1.SQL Compare 比较和同步SQL Server数据库结构 2.SQL Data Compare 比较和同步SQL ...

  5. sublime text3同时编辑多行

    sublime text3同时编辑多行 下面的才是正确的姿势,之前一直是shift + 右键 拖啊. http://stackoverflow.com/questions/32127604/how-t ...

  6. 研究一下javascript的模块规范(CommonJs/AMD/CMD)

    最近写react需要使用nodejs作为开发环境,需要通过npm安装一些第三方的依赖库,因此慢慢感觉到nodejs基础薄弱对我带来了一些不安全感,尤其是javascript模块这一块听到了很多概念,比 ...

  7. 前端:图文混排-怎么在不使用float的情况下实现想要的效果呢?

    异常处理汇总-前端系列 http://www.cnblogs.com/dunitian/p/4523015.html 举个例子 重点:display:flex (参考:http://www.360do ...

  8. 【Win 10 应用开发】RTM版的UAP项目解剖

    Windows 10 发布后,其实SDK也偷偷地在VS的自定义安装列表中出现了,今天开发人员中心也更新了下载.正式版的SDK在API结构上和以前预览的时候是一样的,只是版本变成10240罢了,所以大家 ...

  9. Visualize Surface by Delaunay Triangulator

    Visualize Surface by Delaunay Triangulator eryar@163.com Abstract. Delaunay Triangulation is the cor ...

  10. Android总结之json解析(FastJson Gson 对比)

    前言: 最近为了统一项目中使用的框架,发现项目中用到了两种json解析框架,他们就是当今非常主流的json解析框架:google的Gson 和阿里巴巴的FastJson,为了废除其中一个所以来个性能和 ...