first commit
This commit is contained in:
Executable
+206
@@ -0,0 +1,206 @@
|
||||
#!/bin/bash
|
||||
|
||||
#############################################
|
||||
# SSL Manager 启动脚本
|
||||
#############################################
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BACKEND_DIR="$SCRIPT_DIR/../backend"
|
||||
LOG_DIR="/var/log/ssl-manager"
|
||||
PID_FILE="$LOG_DIR/ssl-manager.pid"
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
# 检查是否已运行
|
||||
check_running() {
|
||||
# 检查 PID 文件
|
||||
if [ -f "$PID_FILE" ]; then
|
||||
PID=$(cat "$PID_FILE")
|
||||
if ps -p "$PID" > /dev/null 2>&1; then
|
||||
echo -e "${YELLOW}⚠️ SSL Manager 已在运行中 (PID: $PID)${NC}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ 发现旧的 PID 文件,清理中...${NC}"
|
||||
rm -f "$PID_FILE"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 检查端口占用
|
||||
if command -v netstat > /dev/null 2>&1; then
|
||||
if netstat -tlnp 2>/dev/null | grep -q ":3000"; then
|
||||
echo -e "${YELLOW}⚠️ 端口 3000 已被占用,服务可能已在运行${NC}"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# 检查进程
|
||||
if pgrep -f "node.*src/index.js" > /dev/null 2>&1; then
|
||||
echo -e "${YELLOW}⚠️ SSL Manager 进程已在运行${NC}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# 创建日志目录
|
||||
setup_logs() {
|
||||
if [ ! -d "$LOG_DIR" ]; then
|
||||
sudo mkdir -p "$LOG_DIR"
|
||||
sudo chmod 755 "$LOG_DIR"
|
||||
echo -e "${GREEN}✓ 日志目录已创建${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# 检查依赖
|
||||
check_dependencies() {
|
||||
if ! command -v node &> /dev/null; then
|
||||
echo -e "${RED}❌ 错误:未找到 Node.js,请先安装${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$BACKEND_DIR/node_modules/.bin/express" ] && [ ! -d "$BACKEND_DIR/node_modules" ]; then
|
||||
echo -e "${YELLOW}⚠️ 后端依赖未安装,正在安装...${NC}"
|
||||
cd "$BACKEND_DIR"
|
||||
npm config set registry https://registry.npmmirror.com
|
||||
npm install --production
|
||||
fi
|
||||
}
|
||||
|
||||
# 启动服务
|
||||
start_service() {
|
||||
echo -e "${GREEN}🚀 启动 SSL Manager...${NC}"
|
||||
|
||||
# 检查 systemd 服务是否在运行
|
||||
if command -v systemctl > /dev/null 2>&1; then
|
||||
if systemctl is-active --quiet ssl-manager 2>/dev/null; then
|
||||
echo -e "${YELLOW}ℹ️ 检测到 systemd 服务正在运行${NC}"
|
||||
echo -e "${YELLOW} 建议使用:sudo systemctl [start|stop|restart] ssl-manager${NC}"
|
||||
echo -e "${YELLOW} 或使用本脚本的 restart 参数自动切换${NC}"
|
||||
echo ""
|
||||
read -p "是否停止 systemd 服务并改用脚本启动?(y/n): " choice
|
||||
if [ "$choice" = "y" ]; then
|
||||
echo -e "${YELLOW}🛑 停止 systemd 服务...${NC}"
|
||||
sudo systemctl stop ssl-manager
|
||||
sudo systemctl disable ssl-manager
|
||||
sleep 2
|
||||
else
|
||||
echo -e "${GREEN}✓ 继续使用 systemd 服务${NC}"
|
||||
echo -e "${GREEN}📍 访问地址:http://localhost:3000${NC}"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
cd "$BACKEND_DIR"
|
||||
nohup node src/index.js > "$LOG_DIR/backend.log" 2>&1 &
|
||||
PID=$!
|
||||
|
||||
echo "$PID" > "$PID_FILE"
|
||||
|
||||
# 等待服务启动
|
||||
sleep 3
|
||||
|
||||
if ps -p "$PID" > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}✓ SSL Manager 启动成功 (PID: $PID)${NC}"
|
||||
echo -e "${GREEN}📍 访问地址:http://localhost:3000${NC}"
|
||||
echo -e "${GREEN}📝 日志文件:$LOG_DIR/backend.log${NC}"
|
||||
return 0
|
||||
else
|
||||
echo -e "${RED}❌ 启动失败,请查看日志:$LOG_DIR/backend.log${NC}"
|
||||
cat "$LOG_DIR/backend.log" | tail -20
|
||||
rm -f "$PID_FILE"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 停止服务
|
||||
stop_service() {
|
||||
echo -e "${YELLOW}🛑 停止 SSL Manager...${NC}"
|
||||
|
||||
if [ -f "$PID_FILE" ]; then
|
||||
PID=$(cat "$PID_FILE")
|
||||
if ps -p "$PID" > /dev/null 2>&1; then
|
||||
kill "$PID"
|
||||
sleep 2
|
||||
if ps -p "$PID" > /dev/null 2>&1; then
|
||||
kill -9 "$PID"
|
||||
fi
|
||||
echo -e "${GREEN}✓ 服务已停止${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠️ 服务未运行${NC}"
|
||||
fi
|
||||
rm -f "$PID_FILE"
|
||||
else
|
||||
# 尝试通过进程名停止
|
||||
pkill -f "node src/index.js" 2>/dev/null && echo -e "${GREEN}✓ 服务已停止${NC}" || echo -e "${YELLOW}⚠️ 服务未运行${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# 重启服务
|
||||
restart_service() {
|
||||
stop_service
|
||||
sleep 2
|
||||
start_service
|
||||
}
|
||||
|
||||
# 查看状态
|
||||
show_status() {
|
||||
if check_running; then
|
||||
echo -e "${GREEN}● SSL Manager 运行中${NC}"
|
||||
echo " PID: $(cat "$PID_FILE")"
|
||||
echo " 端口:3000"
|
||||
echo " 日志:$LOG_DIR/backend.log"
|
||||
else
|
||||
echo -e "${YELLOW}○ SSL Manager 未运行${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# 查看日志
|
||||
show_logs() {
|
||||
if [ -f "$LOG_DIR/backend.log" ]; then
|
||||
tail -f "$LOG_DIR/backend.log"
|
||||
else
|
||||
echo -e "${RED}❌ 日志文件不存在${NC}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 主函数
|
||||
case "${1:-start}" in
|
||||
start)
|
||||
if ! check_running; then
|
||||
setup_logs
|
||||
check_dependencies
|
||||
start_service
|
||||
fi
|
||||
;;
|
||||
stop)
|
||||
stop_service
|
||||
;;
|
||||
restart)
|
||||
restart_service
|
||||
;;
|
||||
status)
|
||||
show_status
|
||||
;;
|
||||
logs)
|
||||
show_logs
|
||||
;;
|
||||
*)
|
||||
echo "用法:$0 {start|stop|restart|status|logs}"
|
||||
echo ""
|
||||
echo "命令:"
|
||||
echo " start - 启动服务"
|
||||
echo " stop - 停止服务"
|
||||
echo " restart - 重启服务"
|
||||
echo " status - 查看状态"
|
||||
echo " logs - 查看日志(实时)"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user