2025-09-11 15:52:38 +08:00
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
2025-09-11 16:14:15 +08:00
|
|
|
|
# 结伴客后端服务PM2启动脚本
|
|
|
|
|
|
# 使用PM2管理Node.js应用程序
|
2025-09-11 15:52:38 +08:00
|
|
|
|
|
|
|
|
|
|
# 设置颜色变量
|
|
|
|
|
|
RED='\033[0;31m'
|
|
|
|
|
|
GREEN='\033[0;32m'
|
|
|
|
|
|
YELLOW='\033[1;33m'
|
2025-09-11 16:14:15 +08:00
|
|
|
|
BLUE='\033[0;34m'
|
2025-09-11 15:52:38 +08:00
|
|
|
|
NC='\033[0m' # No Color
|
|
|
|
|
|
|
|
|
|
|
|
# 显示脚本使用说明
|
|
|
|
|
|
show_usage() {
|
|
|
|
|
|
echo "用法: $0 [选项]"
|
|
|
|
|
|
echo "选项:"
|
2025-09-11 16:14:15 +08:00
|
|
|
|
echo " start 使用PM2启动后端服务"
|
|
|
|
|
|
echo " stop 停止PM2管理的后端服务"
|
|
|
|
|
|
echo " restart 重启PM2管理的后端服务"
|
|
|
|
|
|
echo " status 查看PM2服务状态"
|
|
|
|
|
|
echo " logs 查看PM2服务日志"
|
|
|
|
|
|
echo " delete 从PM2中删除应用"
|
|
|
|
|
|
echo " list 列出所有PM2应用"
|
2025-09-11 15:52:38 +08:00
|
|
|
|
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}"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-11 16:14:15 +08:00
|
|
|
|
# 检查是否安装了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
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-11 15:52:38 +08:00
|
|
|
|
# 检查依赖是否已安装
|
|
|
|
|
|
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
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-11 16:14:15 +08:00
|
|
|
|
# 检查应用是否已在PM2中运行
|
|
|
|
|
|
is_app_running() {
|
|
|
|
|
|
pm2 list | grep -q "jiebanke-backend"
|
|
|
|
|
|
return $?
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-11 15:52:38 +08:00
|
|
|
|
# 启动服务
|
|
|
|
|
|
start_service() {
|
2025-09-11 16:14:15 +08:00
|
|
|
|
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
|
2025-09-11 15:52:38 +08:00
|
|
|
|
fi
|
|
|
|
|
|
|
2025-09-11 16:14:15 +08:00
|
|
|
|
# 使用PM2启动服务
|
|
|
|
|
|
pm2 start ecosystem.config.js --env production
|
2025-09-11 15:52:38 +08:00
|
|
|
|
|
2025-09-11 16:14:15 +08:00
|
|
|
|
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}"
|
2025-09-11 15:52:38 +08:00
|
|
|
|
|
2025-09-11 16:14:15 +08:00
|
|
|
|
# 检查应用是否在运行
|
|
|
|
|
|
if ! is_app_running; then
|
|
|
|
|
|
echo -e "${YELLOW}应用未在运行${NC}"
|
|
|
|
|
|
return 0
|
|
|
|
|
|
fi
|
2025-09-11 15:52:38 +08:00
|
|
|
|
|
2025-09-11 16:14:15 +08:00
|
|
|
|
pm2 stop ecosystem.config.js
|
2025-09-11 15:52:38 +08:00
|
|
|
|
|
2025-09-11 16:14:15 +08:00
|
|
|
|
if [ $? -eq 0 ]; then
|
|
|
|
|
|
echo -e "${GREEN}✓ 服务已停止${NC}"
|
|
|
|
|
|
else
|
|
|
|
|
|
echo -e "${YELLOW}停止服务时遇到问题${NC}"
|
|
|
|
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 重启服务
|
|
|
|
|
|
restart_service() {
|
|
|
|
|
|
echo -e "${GREEN}正在重启PM2管理的服务...${NC}"
|
2025-09-11 15:52:38 +08:00
|
|
|
|
|
2025-09-11 16:14:15 +08:00
|
|
|
|
# 检查应用是否在运行,如果未运行则直接启动
|
|
|
|
|
|
if ! is_app_running; then
|
|
|
|
|
|
echo -e "${YELLOW}应用未在运行,正在启动...${NC}"
|
|
|
|
|
|
pm2 start ecosystem.config.js --env production
|
2025-09-11 15:52:38 +08:00
|
|
|
|
else
|
2025-09-11 16:14:15 +08:00
|
|
|
|
pm2 restart ecosystem.config.js --env production
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
if [ $? -eq 0 ]; then
|
|
|
|
|
|
echo -e "${GREEN}✓ 服务已重启${NC}"
|
|
|
|
|
|
else
|
|
|
|
|
|
echo -e "${RED}✗ 服务重启失败${NC}"
|
2025-09-11 15:52:38 +08:00
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-11 16:14:15 +08:00
|
|
|
|
# 删除应用
|
|
|
|
|
|
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}"
|
2025-09-11 15:52:38 +08:00
|
|
|
|
else
|
2025-09-11 16:14:15 +08:00
|
|
|
|
echo -e "${YELLOW}删除应用时遇到问题${NC}"
|
2025-09-11 15:52:38 +08:00
|
|
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 查看服务状态
|
|
|
|
|
|
status_service() {
|
2025-09-11 16:14:15 +08:00
|
|
|
|
echo -e "${GREEN}PM2应用状态:${NC}"
|
|
|
|
|
|
pm2 list
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 列出所有应用
|
|
|
|
|
|
list_service() {
|
|
|
|
|
|
echo -e "${GREEN}PM2应用列表:${NC}"
|
|
|
|
|
|
pm2 list
|
2025-09-11 15:52:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 查看日志
|
2025-09-11 16:14:15 +08:00
|
|
|
|
logs_service() {
|
|
|
|
|
|
echo -e "${GREEN}正在查看应用日志...${NC}"
|
|
|
|
|
|
pm2 logs ecosystem.config.js
|
2025-09-11 15:52:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 主逻辑
|
|
|
|
|
|
main() {
|
|
|
|
|
|
# 获取命令行参数
|
|
|
|
|
|
ACTION=${1:-"start"}
|
|
|
|
|
|
|
|
|
|
|
|
case "$ACTION" in
|
|
|
|
|
|
start)
|
|
|
|
|
|
check_node
|
|
|
|
|
|
check_npm
|
2025-09-11 16:14:15 +08:00
|
|
|
|
check_pm2
|
2025-09-11 15:52:38 +08:00
|
|
|
|
check_dependencies
|
|
|
|
|
|
start_service
|
|
|
|
|
|
;;
|
|
|
|
|
|
stop)
|
2025-09-11 16:14:15 +08:00
|
|
|
|
check_pm2
|
2025-09-11 15:52:38 +08:00
|
|
|
|
stop_service
|
|
|
|
|
|
;;
|
|
|
|
|
|
restart)
|
2025-09-11 16:14:15 +08:00
|
|
|
|
check_pm2
|
|
|
|
|
|
restart_service
|
|
|
|
|
|
;;
|
|
|
|
|
|
delete)
|
|
|
|
|
|
check_pm2
|
|
|
|
|
|
delete_service
|
2025-09-11 15:52:38 +08:00
|
|
|
|
;;
|
|
|
|
|
|
status)
|
2025-09-11 16:14:15 +08:00
|
|
|
|
check_pm2
|
2025-09-11 15:52:38 +08:00
|
|
|
|
status_service
|
|
|
|
|
|
;;
|
2025-09-11 16:14:15 +08:00
|
|
|
|
list)
|
|
|
|
|
|
check_pm2
|
|
|
|
|
|
list_service
|
|
|
|
|
|
;;
|
2025-09-11 15:52:38 +08:00
|
|
|
|
logs)
|
2025-09-11 16:14:15 +08:00
|
|
|
|
check_pm2
|
|
|
|
|
|
logs_service
|
2025-09-11 15:52:38 +08:00
|
|
|
|
;;
|
|
|
|
|
|
help)
|
|
|
|
|
|
show_usage
|
|
|
|
|
|
;;
|
|
|
|
|
|
*)
|
|
|
|
|
|
echo -e "${RED}未知选项: $ACTION${NC}"
|
|
|
|
|
|
show_usage
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
;;
|
|
|
|
|
|
esac
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 执行主逻辑
|
|
|
|
|
|
main "$@"
|