根据 uwsgi 运行端口号强制杀死进程,然后重启。
使用方法
启动:bash filename start
关闭: bash filename stop
重启: bash filename restart
使用请将设置里的
PORT
修改为自己uwsgi
运行的端口号,INI_FILE_PATH
修改为自己
uwsgi
启动的.ini
文件。
默认stop
不关闭nginx
服务,如果要关闭,可以添加-a
参数:bash filename stop -a
#!/bin/bash
# 设置 uwsgi 参数
PORT=8001 # uwsgi运行端口
UWSGI=uwsgi # uwsgi 命令,如果不在环境变量中请修改为 uwsgi 路径
INI_FILE_PATH=/root/gallery.ini # uwsgi 的启动参数文件,请设置为自己的路径
# 设置 nginx 参数
NGINX=nginx # nginx 命令,如果不在环境变量中请修改为 nginx 路径
# 其他全局变量
KILL_NUM=0
STOP_ALL=0
# 内置函数,杀死运行在 port 上的 uwsgi 进程,返回杀死进程数量
_killUwsgi(){
a=($(lsof -i:$PORT|grep uwsgi|awk '{print $2}')) # 获取 uwsgi运行的 pid
KILL_NUM=0 # 杀死进程数量
# pid 存在
if [ ${#a} != 0 ]
then
echo uwsgi detected in $a
for pid in $a
do
KILL_NUM=$[$KILL_NUM+1];
# 每次杀掉进程前检测是否还有 uwsgi 的进程号,如果没有直接退出循环
pid_str=$(lsof -i:$PORT|grep uwsgi|awk '{print $2}')
if [ ${#pid_str} == 0 ]
then
break
fi
# 杀死进程号
kill -9 $pid
echo killed pid: $pid
done
echo uwsgi stopped
# pid 不存在
else
echo No uwsgi running on port: $PORT
fi
}
# 启动,启动前先保证 uwsgi 被关闭
start(){
_killUwsgi
sleep 3
$UWSGI --ini $INI_FILE_PATH
a=($(lsof -i:$PORT|grep uwsgi|awk '{print $2}'))
if [ ${#a} == 0 ]
then
echo uwsgi seems not working well, try again...
echo
res=$(retry)
if [ $(res) == 1 ]
then
return
fi
fi
echo uwsgi enabled, using ini file: $INI_FILE_PATH
service $NGINX restart
}
retry(){
sleep 3
$UWSGI --ini $INI_FILE_PATH
a=($(lsof -i:$PORT|grep uwsgi|awk '{print $2}'))
if [ ${#a} == 0 ]
then
echo -e "\033[31m !!!uwsgi seems not working well, try to check the configurations!!! \033[0m"
return 1
fi
echo uwsgi enabled, using ini file: $INI_FILE_PATH
service $NGINX restart
return 0
}
restart(){
start
}
stop(){
_killUwsgi
# 默认不关闭 nginx,如果加入参数 -a 则将关闭 nginx
}
while getopts "a" opt
do
case $opt in
a)
service $NGINX stop
echo nginx stopped
esac
done
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $0 ( start | restart | stop) "
start
esac
截图: