更新PM2配置并添加相关脚本

This commit is contained in:
2025-09-11 16:14:15 +08:00
parent 2430ba5a6c
commit 15b9cd406e
5 changed files with 1306 additions and 130 deletions

View File

@@ -1,22 +1,26 @@
#!/bin/bash
# 结伴客后端服务启动脚本
# 用于启动Node.js后端服务
# 结伴客后端服务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 启动后端服务"
echo " stop 停止后端服务"
echo " restart 重启后端服务"
echo " status 查看服务状态"
echo " start 使用PM2启动后端服务"
echo " stop 停止PM2管理的后端服务"
echo " restart 重启PM2管理的后端服务"
echo " status 查看PM2服务状态"
echo " logs 查看PM2服务日志"
echo " delete 从PM2中删除应用"
echo " list 列出所有PM2应用"
echo " help 显示帮助信息"
}
@@ -42,6 +46,22 @@ check_npm() {
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
@@ -57,104 +77,111 @@ check_dependencies() {
fi
}
# 检查应用是否已在PM2中运行
is_app_running() {
pm2 list | grep -q "jiebanke-backend"
return $?
}
# 启动服务
start_service() {
# 检查服务是否已经在运行
if pgrep -f "node.*server.js" > /dev/null; then
echo -e "${YELLOW}警告: 服务已在运行中${NC}"
exit 1
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
echo -e "${GREEN}正在启动结伴客后端服务...${NC}"
# 使用PM2启动服务
pm2 start ecosystem.config.js --env production
# 设置环境变量
export NODE_ENV=production
export PORT=${PORT:-3200}
# 启动服务并将其放到后台运行
nohup npm start > server.log 2>&1 &
SERVER_PID=$!
# 将PID保存到文件
echo $SERVER_PID > server.pid
# 等待几秒钟让服务启动
sleep 3
# 检查服务是否成功启动
if pgrep -f "node.*server.js" > /dev/null; then
echo -e "${GREEN}✓ 服务启动成功${NC}"
echo -e "${GREEN}✓ PID: ${SERVER_PID}${NC}"
echo -e "${GREEN}✓ 日志文件: server.log${NC}"
echo -e "${GREEN}✓ 访问地址: http://localhost:${PORT}${NC}"
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}✗ 服务启动失败,请检查日志文件 server.log${NC}"
rm -f server.pid
echo -e "${RED}✗ 服务启动失败${NC}"
exit 1
fi
}
# 停止服务
stop_service() {
if [ ! -f server.pid ]; then
if pgrep -f "node.*server.js" > /dev/null; then
echo -e "${YELLOW}警告: 找到正在运行的服务但PID文件不存在${NC}"
echo -e "${YELLOW}尝试查找并终止服务...${NC}"
pkill -f "node.*server.js"
sleep 2
if pgrep -f "node.*server.js" > /dev/null; then
echo -e "${RED}✗ 无法终止服务${NC}"
exit 1
else
echo -e "${GREEN}✓ 服务已终止${NC}"
fi
else
echo -e "${YELLOW}服务未在运行${NC}"
fi
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
SERVER_PID=$(cat server.pid)
if ps -p $SERVER_PID > /dev/null; then
echo -e "${GREEN}正在停止服务 (PID: ${SERVER_PID})...${NC}"
kill $SERVER_PID
sleep 3
if ps -p $SERVER_PID > /dev/null; then
echo -e "${YELLOW}服务未响应,强制终止...${NC}"
kill -9 $SERVER_PID
fi
rm -f server.pid
echo -e "${GREEN}✓ 服务已停止${NC}"
else
echo -e "${YELLOW}PID文件存在但服务未在运行${NC}"
rm -f server.pid
fi
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() {
if [ -f server.pid ]; then
SERVER_PID=$(cat server.pid)
if ps -p $SERVER_PID > /dev/null; then
echo -e "${GREEN}✓ 服务正在运行 (PID: ${SERVER_PID})${NC}"
else
echo -e "${RED}✗ PID文件存在但服务未在运行${NC}"
fi
else
if pgrep -f "node.*server.js" > /dev/null; then
echo -e "${GREEN}✓ 服务正在运行${NC}"
else
echo -e "${YELLOW}服务未在运行${NC}"
fi
fi
echo -e "${GREEN}PM2应用状态:${NC}"
pm2 list
}
# 列出所有应用
list_service() {
echo -e "${GREEN}PM2应用列表:${NC}"
pm2 list
}
# 查看日志
tail_logs() {
if [ -f server.log ]; then
tail -f server.log
else
echo -e "${RED}日志文件不存在${NC}"
fi
logs_service() {
echo -e "${GREEN}正在查看应用日志...${NC}"
pm2 logs ecosystem.config.js
}
# 主逻辑
@@ -166,25 +193,33 @@ main() {
start)
check_node
check_npm
check_pm2
check_dependencies
start_service
;;
stop)
check_pm2
stop_service
;;
restart)
stop_service
sleep 2
check_node
check_npm
check_dependencies
start_service
check_pm2
restart_service
;;
delete)
check_pm2
delete_service
;;
status)
check_pm2
status_service
;;
list)
check_pm2
list_service
;;
logs)
tail_logs
check_pm2
logs_service
;;
help)
show_usage