safesight-control/scripts/deploy/start.sh
2026-02-25 11:00:55 +08:00

99 lines
2.5 KiB
Bash

#!/bin/bash
# 3588AdminBackend 启动脚本
set -e
# 配置
APP_NAME="managerd"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
APP_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
BIN_PATH="$APP_DIR/bin/$APP_NAME"
CONFIG_PATH="$APP_DIR/config/managerd.json"
LOG_DIR="$APP_DIR/logs"
PID_FILE="$APP_DIR/$APP_NAME.pid"
# 显示信息
echo "========== 启动 3588AdminBackend =========="
echo "应用目录: $APP_DIR"
echo "配置文件: $CONFIG_PATH"
echo ""
# 检查二进制文件
if [ ! -f "$BIN_PATH" ]; then
echo "错误: 未找到二进制文件: $BIN_PATH"
exit 1
fi
# 检查配置文件
if [ ! -f "$CONFIG_PATH" ]; then
echo "错误: 配置文件不存在: $CONFIG_PATH"
echo "请从示例文件创建:"
echo " cp $APP_DIR/config/managerd.json.example $CONFIG_PATH"
exit 1
fi
# 验证 JSON 格式
if ! python3 -m json.tool "$CONFIG_PATH" > /dev/null 2>&1; then
echo "错误: 配置文件 JSON 格式不正确"
echo "请检查: $CONFIG_PATH"
exit 1
fi
# 创建日志目录
mkdir -p "$LOG_DIR"
# 检查是否已在运行
if [ -f "$PID_FILE" ]; then
PID=$(cat "$PID_FILE")
if ps -p "$PID" > /dev/null 2>&1; then
echo "警告: $APP_NAME 已在运行 (PID: $PID)"
echo "如需重启,请先执行 stop.sh"
exit 1
else
echo "清理过期的 PID 文件"
rm -f "$PID_FILE"
fi
fi
# 启动服务
echo "正在启动 $APP_NAME..."
echo "日志文件: $LOG_DIR/$APP_NAME.log"
# 使用 nohup 后台运行
nohup "$BIN_PATH" -config "$CONFIG_PATH" >> "$LOG_DIR/$APP_NAME.log" 2>&1 &
PID=$!
echo $PID > "$PID_FILE"
# 等待启动
sleep 2
if ps -p "$PID" > /dev/null 2>&1; then
echo ""
echo "✅ 启动成功!"
echo " PID: $PID"
echo " 日志: $LOG_DIR/$APP_NAME.log"
# 尝试读取监听地址
sleep 1
if command -v ss &> /dev/null; then
LISTEN_INFO=$(ss -tlnp | grep "$PID" | head -1)
if [ -n "$LISTEN_INFO" ]; then
echo " 监听: $(echo "$LISTEN_INFO" | awk '{print $4}')"
fi
elif command -v netstat &> /dev/null; then
LISTEN_INFO=$(netstat -tlnp 2>/dev/null | grep "$PID/" | head -1)
if [ -n "$LISTEN_INFO" ]; then
echo " 监听: $(echo "$LISTEN_INFO" | awk '{print $4}')"
fi
fi
echo ""
echo "查看日志: tail -f $LOG_DIR/$APP_NAME.log"
echo "查看状态: $0 status 或 3588admin-status"
else
echo ""
echo "❌ 启动失败"
echo "请检查日志: $LOG_DIR/$APP_NAME.log"
rm -f "$PID_FILE"
exit 1
fi