stop_prod.sh 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #!/bin/bash
  2. # 生产环境停止脚本
  3. # 用于停止验证码发送服务(邮件/短信)
  4. set -e # 遇到错误立即退出
  5. # 获取脚本所在目录
  6. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  7. cd "$SCRIPT_DIR"
  8. # 颜色输出
  9. GREEN='\033[0;32m'
  10. YELLOW='\033[1;33m'
  11. RED='\033[0;31m'
  12. NC='\033[0m' # No Color
  13. # 服务类型:email 或 sms 或 all
  14. SERVICE_TYPE="${1:-all}"
  15. # 停止服务的函数
  16. stop_email_service() {
  17. PID_FILE="$SCRIPT_DIR/send_email.pid"
  18. if [ -f "$PID_FILE" ]; then
  19. PID=$(cat "$PID_FILE")
  20. if ps -p "$PID" > /dev/null 2>&1; then
  21. echo -e "${YELLOW}🛑 正在停止邮件服务 (PID: $PID)...${NC}"
  22. kill "$PID"
  23. # 等待进程结束
  24. for i in {1..10}; do
  25. if ! ps -p "$PID" > /dev/null 2>&1; then
  26. break
  27. fi
  28. sleep 1
  29. done
  30. # 如果还在运行,强制杀死
  31. if ps -p "$PID" > /dev/null 2>&1; then
  32. echo -e "${YELLOW}⚠️ 强制停止邮件服务...${NC}"
  33. kill -9 "$PID" 2>/dev/null || true
  34. fi
  35. rm -f "$PID_FILE"
  36. echo -e "${GREEN}✅ 邮件服务已停止${NC}"
  37. else
  38. echo -e "${YELLOW}⚠️ 邮件服务进程不存在 (PID: $PID)${NC}"
  39. rm -f "$PID_FILE"
  40. fi
  41. else
  42. # 尝试通过进程名查找
  43. PIDS=$(pgrep -f "send_email.py" || true)
  44. if [ -n "$PIDS" ]; then
  45. echo -e "${YELLOW}🛑 正在停止邮件服务 (通过进程名查找)...${NC}"
  46. echo "$PIDS" | xargs kill 2>/dev/null || true
  47. sleep 2
  48. echo "$PIDS" | xargs kill -9 2>/dev/null || true
  49. echo -e "${GREEN}✅ 邮件服务已停止${NC}"
  50. else
  51. echo -e "${YELLOW}⚠️ 未找到运行中的邮件服务${NC}"
  52. fi
  53. fi
  54. }
  55. stop_sms_service() {
  56. PID_FILE="$SCRIPT_DIR/send_sms_gn.pid"
  57. if [ -f "$PID_FILE" ]; then
  58. PID=$(cat "$PID_FILE")
  59. if ps -p "$PID" > /dev/null 2>&1; then
  60. echo -e "${YELLOW}🛑 正在停止短信服务 (PID: $PID)...${NC}"
  61. kill "$PID"
  62. # 等待进程结束
  63. for i in {1..10}; do
  64. if ! ps -p "$PID" > /dev/null 2>&1; then
  65. break
  66. fi
  67. sleep 1
  68. done
  69. # 如果还在运行,强制杀死
  70. if ps -p "$PID" > /dev/null 2>&1; then
  71. echo -e "${YELLOW}⚠️ 强制停止短信服务...${NC}"
  72. kill -9 "$PID" 2>/dev/null || true
  73. fi
  74. rm -f "$PID_FILE"
  75. echo -e "${GREEN}✅ 短信服务已停止${NC}"
  76. else
  77. echo -e "${YELLOW}⚠️ 短信服务进程不存在 (PID: $PID)${NC}"
  78. rm -f "$PID_FILE"
  79. fi
  80. else
  81. # 尝试通过进程名查找
  82. PIDS=$(pgrep -f "send_sms_gn.py" || true)
  83. if [ -n "$PIDS" ]; then
  84. echo -e "${YELLOW}🛑 正在停止短信服务 (通过进程名查找)...${NC}"
  85. echo "$PIDS" | xargs kill 2>/dev/null || true
  86. sleep 2
  87. echo "$PIDS" | xargs kill -9 2>/dev/null || true
  88. echo -e "${GREEN}✅ 短信服务已停止${NC}"
  89. else
  90. echo -e "${YELLOW}⚠️ 未找到运行中的短信服务${NC}"
  91. fi
  92. fi
  93. }
  94. # 根据参数停止相应服务
  95. case "$SERVICE_TYPE" in
  96. email)
  97. stop_email_service
  98. ;;
  99. sms)
  100. stop_sms_service
  101. ;;
  102. all)
  103. stop_email_service
  104. sleep 1
  105. stop_sms_service
  106. echo ""
  107. echo -e "${GREEN}✅ 所有服务已停止${NC}"
  108. ;;
  109. *)
  110. echo -e "${RED}❌ 错误: 未知的服务类型 '$SERVICE_TYPE'${NC}"
  111. echo ""
  112. echo "用法: $0 [email|sms|all]"
  113. echo ""
  114. echo "参数说明:"
  115. echo " email - 仅停止邮件验证码发送服务"
  116. echo " sms - 仅停止短信验证码发送服务"
  117. echo " all - 停止所有服务(默认)"
  118. exit 1
  119. ;;
  120. esac