#!/bin/bash # 结伴客后端服务PM2启动脚本 # 使用PM2管理Node.js应用程序 # 设置颜色变量 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 显示脚本使用说明 show_usage() { echo "用法: $0 [选项]" echo "选项:" echo " start 使用PM2启动后端服务" echo " stop 停止PM2管理的后端服务" echo " restart 重启PM2管理的后端服务" echo " status 查看PM2服务状态" echo " logs 查看PM2服务日志" echo " delete 从PM2中删除应用" echo " list 列出所有PM2应用" echo " help 显示帮助信息" } # 检查是否安装了Node.js check_node() { if ! command -v node &> /dev/null; then echo -e "${RED}错误: 未找到Node.js,请先安装Node.js${NC}" exit 1 fi NODE_VERSION=$(node -v) echo -e "${GREEN}✓ Node.js版本: ${NODE_VERSION}${NC}" } # 检查是否安装了npm check_npm() { if ! command -v npm &> /dev/null; then echo -e "${RED}错误: 未找到npm,请先安装npm${NC}" exit 1 fi NPM_VERSION=$(npm -v) echo -e "${GREEN}✓ npm版本: ${NPM_VERSION}${NC}" } # 检查是否安装了PM2 check_pm2() { if ! command -v pm2 &> /dev/null; then echo -e "${YELLOW}警告: 未找到PM2,正在安装...${NC}" npm install -g pm2 if [ $? -ne 0 ]; then echo -e "${RED}错误: PM2安装失败${NC}" exit 1 fi echo -e "${GREEN}✓ PM2安装完成${NC}" else PM2_VERSION=$(pm2 -v) echo -e "${GREEN}✓ PM2版本: ${PM2_VERSION}${NC}" fi } # 检查依赖是否已安装 check_dependencies() { if [ ! -d "node_modules" ]; then echo -e "${YELLOW}警告: 未找到node_modules目录,正在安装依赖...${NC}" npm install if [ $? -ne 0 ]; then echo -e "${RED}错误: 依赖安装失败${NC}" exit 1 fi echo -e "${GREEN}✓ 依赖安装完成${NC}" else echo -e "${GREEN}✓ 依赖已安装${NC}" fi } # 检查应用是否已在PM2中运行 is_app_running() { pm2 list | grep -q "jiebanke-backend" return $? } # 启动服务 start_service() { echo -e "${GREEN}正在使用PM2启动结伴客后端服务...${NC}" # 检查应用是否已经在运行 if is_app_running; then echo -e "${YELLOW}警告: 应用已在PM2中运行${NC}" echo -e "${BLUE}提示: 使用 'pm2 restart jiebanke-backend' 重启应用${NC}" echo -e "${BLUE}提示: 使用 'pm2 stop jiebanke-backend' 停止应用${NC}" return 0 fi # 使用PM2启动服务 pm2 start ecosystem.config.js --env production if [ $? -eq 0 ]; then echo -e "${GREEN}✓ 服务已通过PM2启动${NC}" echo -e "${GREEN}✓ 执行 'pm2 list' 查看运行中的应用${NC}" echo -e "${GREEN}✓ 执行 'pm2 logs' 查看应用日志${NC}" else echo -e "${RED}✗ 服务启动失败${NC}" exit 1 fi } # 停止服务 stop_service() { echo -e "${GREEN}正在停止PM2管理的服务...${NC}" # 检查应用是否在运行 if ! is_app_running; then echo -e "${YELLOW}应用未在运行${NC}" return 0 fi pm2 stop ecosystem.config.js if [ $? -eq 0 ]; then echo -e "${GREEN}✓ 服务已停止${NC}" else echo -e "${YELLOW}停止服务时遇到问题${NC}" fi } # 重启服务 restart_service() { echo -e "${GREEN}正在重启PM2管理的服务...${NC}" # 检查应用是否在运行,如果未运行则直接启动 if ! is_app_running; then echo -e "${YELLOW}应用未在运行,正在启动...${NC}" pm2 start ecosystem.config.js --env production else pm2 restart ecosystem.config.js --env production fi if [ $? -eq 0 ]; then echo -e "${GREEN}✓ 服务已重启${NC}" else echo -e "${RED}✗ 服务重启失败${NC}" exit 1 fi } # 删除应用 delete_service() { echo -e "${GREEN}正在从PM2中删除应用...${NC}" # 检查应用是否存在 if ! is_app_running; then echo -e "${YELLOW}应用不存在或未在运行${NC}" return 0 fi pm2 delete ecosystem.config.js if [ $? -eq 0 ]; then echo -e "${GREEN}✓ 应用已从PM2中删除${NC}" else echo -e "${YELLOW}删除应用时遇到问题${NC}" fi } # 查看服务状态 status_service() { echo -e "${GREEN}PM2应用状态:${NC}" pm2 list } # 列出所有应用 list_service() { echo -e "${GREEN}PM2应用列表:${NC}" pm2 list } # 查看日志 logs_service() { echo -e "${GREEN}正在查看应用日志...${NC}" pm2 logs ecosystem.config.js } # 主逻辑 main() { # 获取命令行参数 ACTION=${1:-"start"} case "$ACTION" in start) check_node check_npm check_pm2 check_dependencies start_service ;; stop) check_pm2 stop_service ;; restart) check_pm2 restart_service ;; delete) check_pm2 delete_service ;; status) check_pm2 status_service ;; list) check_pm2 list_service ;; logs) check_pm2 logs_service ;; help) show_usage ;; *) echo -e "${RED}未知选项: $ACTION${NC}" show_usage exit 1 ;; esac } # 执行主逻辑 main "$@"