Files
deploy-test/restart.sh
2026-04-13 01:27:34 +07:00

126 lines
4.0 KiB
Bash
Executable File
Raw Permalink 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.

#!/usr/bin/env bash
# =============================================================================
# restart.sh — 重启指定服务
#
# 用法:
# ./restart.sh <service> # 重启后端服务(使用已有二进制)
# ./restart.sh <service> --build # 先重新编译再重启
# ./restart.sh <docker-service> # 重启 Docker 容器redis/kafka/etcd
#
# 示例:
# ./restart.sh chat-api
# ./restart.sh chat-api --build
# ./restart.sh redis
# =============================================================================
set -euo pipefail
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh"
load_env
init_script_log # ← 脚本执行日志
SVC="${1:-}"
OPT="${2:-}"
[[ -z "$SVC" ]] && { error "用法: $0 <service> [--build]"; exit 1; }
# ── 服务配置(与 05-start.sh 保持一致)───────────────────────────────────────
declare -A svc_workdir=(
[openim-server]="$ROOT_DIR/open-im-server"
[chat-rpc]="$ROOT_DIR/chat"
[admin-rpc]="$ROOT_DIR/chat"
[chat-api]="$ROOT_DIR/chat"
[admin-api]="$ROOT_DIR/chat"
[meetingmsg]="$ROOT_DIR/meetingmsg"
[livecloud]="$ROOT_DIR/livecloud"
[livestream]="$ROOT_DIR/livestream"
)
declare -A svc_args=(
[openim-server]="-c $ROOT_DIR/open-im-server/config"
[chat-rpc]="-c $ROOT_DIR/chat/config"
[admin-rpc]="-c $ROOT_DIR/chat/config"
[chat-api]="-c $ROOT_DIR/chat/config"
[admin-api]="-c $ROOT_DIR/chat/config"
[meetingmsg]=""
[livecloud]=""
[livestream]=""
)
declare -A svc_src_dir=(
[openim-server]="open-im-server"
[chat-rpc]="chat"
[admin-rpc]="chat"
[chat-api]="chat"
[admin-api]="chat"
[meetingmsg]="meetingmsg"
[livecloud]="livecloud"
[livestream]="livestream"
)
declare -A svc_src_pkg=(
[openim-server]="./cmd/main.go"
[chat-rpc]="./cmd/rpc/chat-rpc/"
[admin-rpc]="./cmd/rpc/admin-rpc/"
[chat-api]="./cmd/api/chat-api/"
[admin-api]="./cmd/api/admin-api/"
[meetingmsg]="."
[livecloud]="."
[livestream]="."
)
# ── Docker 容器重启 ───────────────────────────────────────────────────────────
_restart_docker() {
local label="$1" cname="$2"
require_docker_running
if docker ps -a --format '{{.Names}}' | grep -q "^${cname}$"; then
info "重启容器 $cname ..."
docker restart "$cname" > /dev/null
sleep 2
if docker ps --format '{{.Names}}' | grep -q "^${cname}$"; then
success "$label 容器已重启 (container=$cname)"
else
error "$label 重启失败"
fi
else
warn "容器 $cname 不存在,请先执行 03-start-infra.sh"
fi
}
# ── 处理 Docker 容器 ──────────────────────────────────────────────────────────
case "$SVC" in
redis) _restart_docker "Redis" "dev-redis"; exit 0 ;;
kafka) _restart_docker "Kafka" "dev-kafka"; exit 0 ;;
etcd) _restart_docker "Etcd" "dev-etcd"; exit 0 ;;
esac
# ── 处理后端服务 ──────────────────────────────────────────────────────────────
if [[ -z "${svc_workdir[$SVC]:-}" ]]; then
error "未知服务: $SVC"
echo "后端服务: ${!svc_workdir[*]}"
echo "Docker: redis, kafka, etcd"
exit 1
fi
step "重启服务: $SVC"
# 是否先重新编译
if [[ "$OPT" == "--build" ]]; then
info "重新编译 $SVC ..."
dir="$ROOT_DIR/${svc_src_dir[$SVC]}"
pkg="${svc_src_pkg[$SVC]}"
(cd "$dir" && go build -o "$BUILD_DIR/$SVC" "$pkg") && \
success "编译完成" || { error "编译失败"; exit 1; }
fi
# 停止旧进程
stop_svc "$SVC"
sleep 1
# 启动新进程
start_svc "$SVC" \
"$BUILD_DIR/$SVC" \
"${svc_args[$SVC]}" \
"${svc_workdir[$SVC]}"
echo ""
echo -e "查看日志: ${CYAN}./deploy-test/logs.sh $SVC${NC}"