Files
jiebanke/backend/start_server.sh

Symbolic link
236 lines
5.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 "$@"