Files
jiebanke/backend/start_server.bat

430 lines
10 KiB
Batchfile
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.

module.exports = {
apps: [{
name: 'jiebanke-backend',
script: 'server.js',
env: {
PORT: 3200,
NODE_ENV: 'production',
},
autorestart: true,
watch: false,
max_memory_restart: '1G',
output: 'logs/pm2.log',
error: 'logs/pm2-error.log',
log: 'logs/pm2-combined.log',
pid_file: 'pm2.pid',
instances: 1,
exec_mode: 'fork'
}]
};
#!/bin/bash
# 结伴客后端服务启动脚本
# 用于启动Node.js后端服务
# 设置颜色变量
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 显示脚本使用说明
show_usage() {
echo "用法: $0 [选项]"
echo "选项:"
echo " start 启动后端服务"
echo " stop 停止后端服务"
echo " restart 重启后端服务"
echo " status 查看服务状态"
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}"
}
# 检查依赖是否已安装
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
}
# 启动服务
start_service() {
# 检查服务是否已经在运行
if pgrep -f "node.*server.js" > /dev/null; then
echo -e "${YELLOW}警告: 服务已在运行中${NC}"
exit 1
fi
echo -e "${GREEN}正在启动结伴客后端服务...${NC}"
# 设置环境变量
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}"
else
echo -e "${RED}✗ 服务启动失败,请检查日志文件 server.log${NC}"
rm -f server.pid
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
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
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
}
# 查看日志
tail_logs() {
if [ -f server.log ]; then
tail -f server.log
else
echo -e "${RED}日志文件不存在${NC}"
fi
}
# 主逻辑
main() {
# 获取命令行参数
ACTION=${1:-"start"}
case "$ACTION" in
start)
check_node
check_npm
check_dependencies
start_service
;;
stop)
stop_service
;;
restart)
stop_service
sleep 2
check_node
check_npm
check_dependencies
start_service
;;
status)
status_service
;;
logs)
tail_logs
;;
help)
show_usage
;;
*)
echo -e "${RED}未知选项: $ACTION${NC}"
show_usage
exit 1
;;
esac
}
# 执行主逻辑
main "$@"
```
```
@echo off
title 结伴客后端服务PM2启动脚本
setlocal enabledelayedexpansion
:: 设置颜色
for /f "delims=" %%i in ('echo prompt $E^| cmd') do set "ESC=%%i"
:: 显示使用说明
if "%1"=="" (
call :show_usage
goto :eof
)
:: 根据参数执行相应操作
if "%1"=="start" (
call :start_service
) else if "%1"=="stop" (
call :stop_service
) else if "%1"=="restart" (
call :restart_service
) else if "%1"=="status" (
call :status_service
) else if "%1"=="logs" (
call :logs_service
) else if "%1"=="delete" (
call :delete_service
) else if "%1"=="list" (
call :list_service
) else if "%1"=="help" (
call :show_usage
) else (
echo %ESC%[91m未知选项: %1%ESC%[0m
call :show_usage
)
goto :eof
:: 显示使用说明
: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 显示帮助信息
goto :eof
:: 检查Node.js
:check_node
echo 检查Node.js环境...
node -v >nul 2>&1
if %errorlevel% neq 0 (
echo %ESC%[91m错误: 未找到Node.js请先安装Node.js%ESC%[0m
exit /b 1
) else (
for /f %%i in ('node -v') do set NODE_VERSION=%%i
echo %ESC%[92m✓ Node.js版本: %NODE_VERSION%%ESC%[0m
)
goto :eof
:: 检查npm
:check_npm
echo 检查npm环境...
npm -v >nul 2>&1
if %errorlevel% neq 0 (
echo %ESC%[91m错误: 未找到npm请先安装npm%ESC%[0m
exit /b 1
) else (
for /f %%i in ('npm -v') do set NPM_VERSION=%%i
echo %ESC%[92m✓ npm版本: %NPM_VERSION%%ESC%[0m
)
goto :eof
:: 检查PM2
:check_pm2
echo 检查PM2环境...
pm2 -v >nul 2>&1
if %errorlevel% neq 0 (
echo %ESC%[93m警告: 未找到PM2正在安装...%ESC%[0m
npm install -g pm2
if !errorlevel! neq 0 (
echo %ESC%[91m错误: PM2安装失败%ESC%[0m
exit /b 1
)
echo %ESC%[92m✓ PM2安装完成%ESC%[0m
) else (
for /f %%i in ('pm2 -v') do set PM2_VERSION=%%i
echo %ESC%[92m✓ PM2版本: %PM2_VERSION%%ESC%[0m
)
goto :eof
:: 检查依赖
:check_dependencies
if not exist "node_modules" (
echo %ESC%[93m警告: 未找到node_modules目录正在安装依赖...%ESC%[0m
npm install
if !errorlevel! neq 0 (
echo %ESC%[91m错误: 依赖安装失败%ESC%[0m
exit /b 1
)
echo %ESC%[92m✓ 依赖安装完成%ESC%[0m
) else (
echo %ESC%[92m✓ 依赖已安装%ESC%[0m
)
goto :eof
:: 启动服务
:start_service
call :check_node
call :check_npm
call :check_pm2
call :check_dependencies
echo %ESC%[92m正在使用PM2启动结伴客后端服务...%ESC%[0m
pm2 start ecosystem.config.js --env production
if %errorlevel% equ 0 (
echo %ESC%[92m✓ 服务已通过PM2启动%ESC%[0m
echo %ESC%[92m✓ 执行 'pm2 list' 查看运行中的应用%ESC%[0m
echo %ESC%[92m✓ 执行 'pm2 logs' 查看应用日志%ESC%[0m
) else (
echo %ESC%[91m✗ 服务启动失败%ESC%[0m
exit /b 1
)
goto :eof
:: 停止服务
:stop_service
call :check_pm2
echo %ESC%[92m正在停止PM2管理的服务...%ESC%[0m
pm2 stop ecosystem.config.js
if %errorlevel% equ 0 (
echo %ESC%[92m✓ 服务已停止%ESC%[0m
) else (
echo %ESC%[93m可能没有正在运行的服务%ESC%[0m
)
goto :eof
:: 重启服务
:restart_service
call :check_pm2
echo %ESC%[92m正在重启PM2管理的服务...%ESC%[0m
:: 检查应用是否在运行,如果未运行则直接启动
call :is_app_running
if %errorlevel% neq 0 (
echo %ESC%[93m应用未在运行正在启动...%ESC%[0m
pm2 start ecosystem.config.js --env production
) else (
pm2 restart ecosystem.config.js --env production
)
if %errorlevel% equ 0 (
echo %ESC%[92m✓ 服务已重启%ESC%[0m
) else (
echo %ESC%[91m✗ 服务重启失败%ESC%[0m
exit /b 1
)
goto :eof
:: 删除应用
:delete_service
call :check_pm2
echo %ESC%[92m正在从PM2中删除应用...%ESC%[0m
:: 检查应用是否存在
call :is_app_running
if %errorlevel% neq 0 (
echo %ESC%[93m应用不存在或未在运行%ESC%[0m
goto :eof
)
pm2 delete ecosystem.config.js
if %errorlevel% equ 0 (
echo %ESC%[92m✓ 应用已从PM2中删除%ESC%[0m
) else (
echo %ESC%[93m删除应用时遇到问题%ESC%[0m
)
goto :eof
:: 查看服务状态
:status_service
call :check_pm2
echo %ESC%[92mPM2应用状态:%ESC%[0m
pm2 list
goto :eof
:: 列出所有应用
:list_service
call :check_pm2
echo %ESC%[92mPM2应用列表:%ESC%[0m
pm2 list
goto :eof
:: 查看日志
:logs_service
call :check_pm2
echo %ESC%[92m正在查看应用日志...%ESC%[0m
pm2 logs ecosystem.config.js
goto :eof