最近在研究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. 触摸java常量池

    java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下. 理论 小菜先拙劣的表达一下jvm虚拟内存分布:      程序计数器是jvm执行程序的 ...

  2. 混合 Data Warehouse 和 Big Data 倉庫的新架構

    (讀書筆記)許多公司,儘管想導入 Big Data,仍必須繼續用 Data Warehouse 來管理結構化的營運數據.系統記錄.而 Big Data 的出現,為 Data Warehouse 提供了 ...

  3. Qt Disable QDebug And Warning Output

    如何禁止qDebug的输出 在项目开发的过程中,为了开发方便,我们常常在Qt的Application Output中输出一些内容,慢慢的. 有些qDebug就会被我们遗忘再角落里. 虽然对整个程序影响 ...

  4. 台式电脑、笔记本快捷选择Boot(启动项快捷键)大全

    我们在安装系统时,会去设置电脑是从硬盘启动.U盘启动.光驱启动.网卡启动. 一般设置的方法有两种:一种是进BIOS主板菜单设置启动项顺序:另一种就是我在这里要介绍的快捷选择启动项. 以下是网友整理的各 ...

  5. ls /usr/linkapp 没反应

    ls /usr/linkapp ll /usr/linkapp  都是一样无反应 没有任何反应, ctrl + c /  ctrl + d 都不行 但是 ls /usr/linkapp/ | wc - ...

  6. [转]深入理解JavaScript的变量作用域

    1.JavaScript的作用域链 2.函数体内部,局部变量的优先级比同名的全局变量高. 3.JavaScript没有块级作用域. 4.函数中声明的变量在整个函数中都有定义. 5.未使用var关键字定 ...

  7. for循环或Repeat里面对某个字段进行复杂处理的解决方案

    在后台用一个方法处理

  8. CSS系列:CSS3新增选择器

    1. CSS1定义的选择器 选择器 类型 说明 E 类型选择器 选择指定类型的元素 E#id ID选择器 选择匹配E的元素,且匹配元素的id为“id”,E选择符可以省略. E.class 类选择器 选 ...

  9. javascript动画系列第五篇——模拟滚动条

    × 目录 [1]原理介绍 [2]数字加减 [3]元素尺寸[4]内容滚动 前面的话 当元素内容溢出元素尺寸范围时,会出现滚动条.但由于滚动条在各浏览器下表现不同,兼容性不好.所以,模拟滚动条也是很常见的 ...

  10. 用 namspace 隔离 DHCP 服务 - 每天5分钟玩转 OpenStack(90)

    Neutron 通过 dnsmasq 提供 DHCP 服务,而 dnsmasq 如何独立的为每个 network 服务呢? 答案是通过 Linux Network Namespace 隔离,本节将详细 ...