#!/bin/bash # 生产环境启动脚本 # 用于启动验证码发送服务(邮件/短信) set -e # 遇到错误立即退出 # 获取脚本所在目录 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" # 颜色输出 GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 服务类型:email 或 sms SERVICE_TYPE="${1:-all}" # 检查配置文件 CONF_FILE="$SCRIPT_DIR/send.conf" if [ ! -f "$CONF_FILE" ]; then echo -e "${RED}❌ 错误: 未找到配置文件 $CONF_FILE${NC}" echo -e "${YELLOW}提示: 请确保 send.conf 文件存在于 sendmsg 目录${NC}" exit 1 fi echo -e "${GREEN}✅ 找到配置文件: $CONF_FILE${NC}" # 检查 Python 环境 if ! command -v python3 &> /dev/null; then echo -e "${RED}❌ 错误: 未找到 python3 命令${NC}" exit 1 fi # 检查虚拟环境(可选,如果使用虚拟环境) if [ -d "venv" ] || [ -d ".venv" ]; then VENV_DIR="" if [ -d "venv" ]; then VENV_DIR="venv" else VENV_DIR=".venv" fi echo -e "${GREEN}✅ 激活虚拟环境: $VENV_DIR${NC}" source "$VENV_DIR/bin/activate" fi # 检查依赖是否已安装 if ! python3 -c "import sqlalchemy" &> /dev/null; then echo -e "${YELLOW}⚠️ 警告: 未检测到 SQLAlchemy,请确保已安装依赖${NC}" echo -e "${YELLOW}提示: 可能需要安装 backend 目录的依赖${NC}" fi # 启动服务的函数 start_email_service() { echo -e "${BLUE}📧 启动邮件验证码发送服务...${NC}" nohup python3 send_email.py > send_email_nohup.log 2>&1 & EMAIL_PID=$! echo $EMAIL_PID > send_email.pid echo -e "${GREEN}✅ 邮件服务已启动,PID: $EMAIL_PID${NC}" echo -e "${YELLOW}日志文件: send_email.log, send_email_error.log${NC}" echo -e "${YELLOW}后台日志: send_email_nohup.log${NC}" } start_sms_service() { echo -e "${BLUE}📱 启动短信验证码发送服务...${NC}" nohup python3 send_sms_gn.py > send_sms_gn_nohup.log 2>&1 & SMS_PID=$! echo $SMS_PID > send_sms_gn.pid echo -e "${GREEN}✅ 短信服务已启动,PID: $SMS_PID${NC}" echo -e "${YELLOW}日志文件: send_sms_gn.log, send_sms_gn_error.log${NC}" echo -e "${YELLOW}后台日志: send_sms_gn_nohup.log${NC}" } # 根据参数启动相应服务 case "$SERVICE_TYPE" in email) start_email_service ;; sms) start_sms_service ;; all) start_email_service sleep 1 start_sms_service echo "" echo -e "${GREEN}✅ 所有服务已启动${NC}" echo -e "${YELLOW}查看进程: ps aux | grep -E 'send_email|send_sms_gn'${NC}" echo -e "${YELLOW}停止服务: ./stop_prod.sh${NC}" ;; *) echo -e "${RED}❌ 错误: 未知的服务类型 '$SERVICE_TYPE'${NC}" echo "" echo "用法: $0 [email|sms|all]" echo "" echo "参数说明:" echo " email - 仅启动邮件验证码发送服务" echo " sms - 仅启动短信验证码发送服务" echo " all - 启动所有服务(默认)" exit 1 ;; esac echo "" echo -e "${GREEN}🚀 服务启动完成!${NC}"