#!/bin/bash #uwsgi快速启动脚本 clear PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH LANG=en_US.UTF-8 if [ $(whoami) != "root" ];then echo "请使用root权限执行本启动命令!" exit 1; fi # 获取当前脚本文件的目录(一定要放到项目根目录中) PROJECT_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" UWSGI_COMMOND="${PROJECT_ROOT}/venv/bin/uwsgi" Return_Error(){ echo '================================================='; printf '\033[1;31;40m%b\033[0m\n' "$@"; exit 1; } # 参数:$1 - 要输出的文本 Print_Success_Text() { GREEN="\033[32m" RESET="\033[0m" echo -e "${GREEN}$1${RESET}" } # 参数:$1 - 要逐个显示的文本 # $2 - 控制字符输出速度的暂停时间(可选,默认为 0.2 秒) Show_Text_With_Ellipsis() { text="$1" pause=${2:-0.1} echo -n "$text" sleep 1 # 显示 "这是一个例子" 1秒钟 for ((i=0; i<3; i++)); do echo -n "." sleep $pause done echo "" } echo -e "============================================" echo -e "1、检查项目python虚拟环境是否存在" echo -e "============================================" if [ -d "${PROJECT_ROOT}/venv" ]; then Print_Success_Text "项目Python虚拟环境已安装" sleep 1 else Return_Error "ERROR: 项目Python虚拟环境未安装,请先执行install.sh脚本" "命令示例:sh install.sh" exit 1 fi if [ -x "${UWSGI_COMMOND}" ]; then Print_Success_Text "检测到uwsgi已安装" sleep 1 else Return_Error "ERROR: 未在项目虚拟环境中检测到uwsgi,请您确保是否正确执行了install.sh脚本" exit 1 fi echo -e "============================================" echo -e "2、检查本项目是否存在uwsgi服务" echo -e "============================================" serviceCheck=$(ps aux | grep ${UWSGI_COMMOND} | grep -v grep) if [ -z "${serviceCheck}" ]; then Show_Text_With_Ellipsis "检测到uwsgi服务未运行,正在启动" 0.3 else echo "${serviceCheck}" Show_Text_With_Ellipsis "正在关闭项目uwsgi服务" 0.3 # 使用 pgrep 找到与特定命令匹配的进程ID pids=$(pgrep -f "$UWSGI_COMMOND") if [ -n "$pids" ]; then # 循环遍历结果中的每个进程ID,并使用 kill 命令终止进程 for pid in $pids; do kill -9 "$pid" echo "已成功终止进程: $pid" done fi Show_Text_With_Ellipsis "正在启动uwsgi服务" 0.3 fi if [ ! -d "$PWD/logs" ]; then mkdir "$PWD/logs" fi nohup ${UWSGI_COMMOND} --ini "${PROJECT_ROOT}/uwsgi_config.ini" --set project_dir="${PROJECT_ROOT}" >> ./logs/uwsgi_nohup.log 2>&1 & #后台启动服务将日志写入uwsgi_nohup.log文件 sleep 1 runerviceCheck=$(ps aux | grep ${UWSGI_COMMOND} | grep -v grep) if [ -z "${runerviceCheck}" ]; then Return_Error "启动uwsgi服务失败,请检查日志文件" else Print_Success_Text "uwsgi服务启动成功" echo "${runerviceCheck}" fi