init
This commit is contained in:
125
restart.sh
Executable file
125
restart.sh
Executable file
@@ -0,0 +1,125 @@
|
||||
#!/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}"
|
||||
Reference in New Issue
Block a user