Files
jiebanke/backend/start_server.bat

267 lines
6.8 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.

#!/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 结伴客后端服务启动脚本
setlocal enabledelayedexpansion
:: 设置颜色
for /f "delims=" %%i in ('echo prompt $E^| cmd') do set "ESC=%%i"
:: 检查Node.js是否安装
echo 检查Node.js环境...
node -v >nul 2>&1
if %errorlevel% neq 0 (
echo %ESC%[91m错误: 未找到Node.js请先安装Node.js%ESC%[0m
pause
exit /b 1
) else (
for /f %%i in ('node -v') do set NODE_VERSION=%%i
echo %ESC%[92m✓ Node.js版本: %NODE_VERSION%%ESC%[0m
)
:: 检查npm是否安装
echo 检查npm环境...
npm -v >nul 2>&1
if %errorlevel% neq 0 (
echo %ESC%[91m错误: 未找到npm请先安装npm%ESC%[0m
pause
exit /b 1
) else (
for /f %%i in ('npm -v') do set NPM_VERSION=%%i
echo %ESC%[92m✓ npm版本: %NPM_VERSION%%ESC%[0m
)
:: 检查依赖是否安装
if not exist "node_modules" (
echo %ESC%[93m警告: 未找到node_modules目录正在安装依赖...%ESC%[0m
npm install
if !errorlevel! neq 0 (
echo %ESC%[91m错误: 依赖安装失败%ESC%[0m
pause
exit /b 1
)
echo %ESC%[92m✓ 依赖安装完成%ESC%[0m
) else (
echo %ESC%[92m✓ 依赖已安装%ESC%[0m
)
:: 设置默认端口
if "%PORT%"=="" set PORT=3200
:: 启动服务
echo %ESC%[92m正在启动结伴客后端服务...%ESC%[0m
echo 服务将在端口 %PORT% 上运行
echo 日志将输出到 server.log 文件
npm start > server.log 2>&1
if %errorlevel% equ 0 (
echo %ESC%[92m✓ 服务启动成功%ESC%[0m
) else (
echo %ESC%[91m✗ 服务启动失败,请检查日志文件 server.log%ESC%[0m
)
pause