Files
qiming/qiming-xagi-frontend-templates/scripts/restart-rcoder.sh
2026-06-01 13:43:09 +08:00

94 lines
3.2 KiB
Bash
Raw 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.
#!/bin/bash
# 重启 rcoder 容器
# 用途: 与 file-server 进程重启解耦,单独执行容器重启
set -e
# 脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
# 加载环境变量
if [ -f "$PROJECT_ROOT/.env" ]; then
source "$PROJECT_ROOT/.env"
else
echo "错误: .env 文件不存在,请先创建 .env 文件"
echo "可以复制 .env.example 并修改配置"
exit 1
fi
# 检查必需的环境变量
if [ -z "$REMOTE_HOST" ] || [ -z "$REMOTE_USER" ] || [ -z "$REMOTE_PASSWORD" ]; then
echo "错误: 缺少必需的环境变量"
echo "请确保 .env 文件中包含: REMOTE_HOST, REMOTE_USER, REMOTE_PASSWORD"
exit 1
fi
# 检查 sshpass 是否安装
if ! command -v sshpass &> /dev/null; then
echo "错误: sshpass 未安装"
echo "请运行: brew install hudochenkov/sshpass/sshpass"
exit 1
fi
echo "步骤: 重启 rcoder 容器"
echo "------------------------------------------"
echo "正在连接远程服务器重启容器..."
sshpass -p "$REMOTE_PASSWORD" ssh -o StrictHostKeyChecking=no \
"$REMOTE_USER@$REMOTE_HOST" << 'EOF'
echo "查找 rcoder 容器..."
# 目标容器名与镜像名(固定值),优先精确匹配,避免误重启同类容器
TARGET_CONTAINER_NAME="docker-rcoder-1"
TARGET_IMAGE="nuwax-docker-images-registry.cn-hangzhou.cr.aliyuncs.com/nuwax-test/rcoder:latest"
# 记录最终命中的容器 ID 与命中策略,便于日志排查
RCODER_CONTAINER=""
MATCH_STRATEGY=""
# 1) 先按容器名精确匹配(最稳定,与你当前线上容器名一致)
RCODER_CONTAINER=$(docker ps -a --filter "name=^${TARGET_CONTAINER_NAME}$" --format "{{.ID}}" | head -1)
if [ -n "$RCODER_CONTAINER" ]; then
MATCH_STRATEGY="容器名精确匹配: ${TARGET_CONTAINER_NAME}"
fi
# 2) 若容器名未命中,再按镜像精确匹配(适合容器名变化但镜像固定的场景)
if [ -z "$RCODER_CONTAINER" ]; then
RCODER_CONTAINER=$(docker ps -a --filter "ancestor=${TARGET_IMAGE}" --format "{{.ID}}" | head -1)
if [ -n "$RCODER_CONTAINER" ]; then
MATCH_STRATEGY="镜像精确匹配: ${TARGET_IMAGE}"
fi
fi
# 3) 最后兜底模糊匹配 name=rcoder兼容历史命名方式
if [ -z "$RCODER_CONTAINER" ]; then
RCODER_CONTAINER=$(docker ps -a --filter "name=rcoder" --format "{{.ID}}" | head -1)
if [ -n "$RCODER_CONTAINER" ]; then
MATCH_STRATEGY="兜底模糊匹配: name=rcoder"
fi
fi
if [ -z "$RCODER_CONTAINER" ]; then
echo "✗ 未找到可重启的 rcoder 容器"
echo "目标容器名: $TARGET_CONTAINER_NAME"
echo "目标镜像: $TARGET_IMAGE"
echo ""
echo "候选容器(名称或镜像包含 rcoder:"
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}" | grep -i "rcoder" || true
exit 1
fi
echo "命中策略: $MATCH_STRATEGY"
echo "重启前容器详情:"
docker ps -a --filter "id=${RCODER_CONTAINER}" --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}"
echo "正在重启容器..."
docker restart "$RCODER_CONTAINER"
echo "重启后容器详情:"
docker ps -a --filter "id=${RCODER_CONTAINER}" --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}"
echo "✓ rcoder 容器重启成功"
EOF