#!/bin/bash # 一键部署脚本模板 # 用法: ./build.sh [deploy|update|stop|status] set -e SERVICE_NAME="asr-service" GIT_REPO="git@git.opencomputing.cn:yumoqing/asr-service.git" SERVICE_PORT=9925 DEPLOY_DIR="/data/ymq/$SERVICE_NAME" VENV_PATH="/data/ymq/wan22-service/py3" GPU_ID="6" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } check_deps() { command -v git >/dev/null || { log_error "git not found"; exit 1; } [ -f "$VENV_PATH/bin/python" ] || { log_error "Python venv not found: $VENV_PATH"; exit 1; } } deploy() { log_info "Deploying $SERVICE_NAME..." # 检查依赖 check_deps # 克隆或更新代码 if [ -d "$DEPLOY_DIR/.git" ]; then log_info "Updating existing deployment..." cd "$DEPLOY_DIR" git fetch origin git reset --hard origin/master else log_info "Cloning repository..." cd /data/ymq git clone "$GIT_REPO" "$SERVICE_NAME" cd "$DEPLOY_DIR" fi # 创建必要目录 mkdir -p "$DEPLOY_DIR/app/api/status" mkdir -p "$DEPLOY_DIR/app/api/submit" mkdir -p "$DEPLOY_DIR/app/api/task" # 设置权限 chmod +x start.sh stop.sh 2>/dev/null || true # 启动服务 start_service } start_service() { log_info "Starting $SERVICE_NAME on port $SERVICE_PORT..." # 停止旧进程 if [ -f stop.sh ]; then bash stop.sh 2>/dev/null || true sleep 2 fi # 启动新进程 bash start.sh # 等待启动 sleep 3 # 验证 if ss -tlnp | grep -q ":$SERVICE_PORT "; then log_info "✓ Service started successfully" verify_api else log_error "✗ Service failed to start" log_error "Check logs: $DEPLOY_DIR/nohup.out" exit 1 fi } verify_api() { log_info "Verifying API endpoints..." # 检查 status endpoint if curl -s "http://127.0.0.1:$SERVICE_PORT/api/status" | grep -q "service"; then log_info "✓ /api/status OK" else log_warn "✗ /api/status failed" fi } stop_service() { log_info "Stopping $SERVICE_NAME..." if [ -f "$DEPLOY_DIR/stop.sh" ]; then cd "$DEPLOY_DIR" bash stop.sh log_info "✓ Service stopped" else log_warn "stop.sh not found" fi } show_status() { echo "=== $SERVICE_NAME Status ===" echo "Port: $SERVICE_PORT" echo "Deploy Dir: $DEPLOY_DIR" echo "" # 检查进程 if ss -tlnp | grep -q ":$SERVICE_PORT "; then echo -e "Status: ${GREEN}RUNNING${NC}" PID=$(ss -tlnp | grep ":$SERVICE_PORT " | grep -oP 'pid=\K[0-9]+') echo "PID: $PID" else echo -e "Status: ${RED}STOPPED${NC}" fi echo "" # 检查 API echo "API Endpoints:" curl -s "http://127.0.0.1:$SERVICE_PORT/api/status" 2>/dev/null | python3 -m json.tool 2>/dev/null || echo " (not responding)" } # 主入口 case "${1:-deploy}" in deploy|install) deploy ;; update|upgrade) deploy ;; stop) stop_service ;; start) start_service ;; status) show_status ;; *) echo "Usage: $0 {deploy|update|stop|start|status}" exit 1 ;; esac