Files
xingrin/backend/scripts/worker-deploy/start-agent.sh
yyhuni 0e9be54215 更新拉取策略为--pull=missing
增加文档
fix: bug统一字符处理
2025-12-17 10:40:37 +08:00

97 lines
2.8 KiB
Bash
Executable File
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
# ============================================
# XingRin Agent 启动脚本
# 用途:启动 agent 容器(心跳上报 + 负载监控)
#
# 架构说明:
# - 使用 docker run 直接启动 agent 容器
# - agent 负责心跳上报和系统负载监控
# - 扫描任务由主服务器通过 SSH 执行独立的 worker 容器
# - 镜像版本由主服务器传入,确保版本一致性
#
# 镜像拉取:
# - 使用 --pull=missing优先使用本地镜像
# - 如果本地没有则从 Docker Hub 拉取
# ============================================
set -e
MARKER_DIR="/opt/xingrin"
CONTAINER_NAME="xingrin-agent"
# 使用轻量 agent 镜像(~30MB仅包含心跳上报功能
# 镜像版本由部署时传入(必须设置)
DOCKER_USER="${DOCKER_USER:-yyhuni}"
if [ -z "$IMAGE_TAG" ]; then
echo "[ERROR] IMAGE_TAG 未设置,请确保部署时传入版本号"
exit 1
fi
IMAGE="${DOCKER_USER}/xingrin-agent:${IMAGE_TAG}"
# 预设变量(远程部署时由 deploy_service.py 替换)
PRESET_SERVER_URL="{{HEARTBEAT_API_URL}}"
PRESET_WORKER_ID="{{WORKER_ID}}"
# 颜色定义
GREEN='\033[0;32m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[XingRin]${NC} $1"; }
log_success() { echo -e "${GREEN}[XingRin]${NC} $1"; }
# 停止旧容器
stop_old() {
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
log_info "停止旧的 agent 容器..."
docker stop ${CONTAINER_NAME} 2>/dev/null || true
docker rm ${CONTAINER_NAME} 2>/dev/null || true
fi
# 兼容旧名称
if docker ps -a --format '{{.Names}}' | grep -q "^xingrin-watchdog$"; then
docker stop xingrin-watchdog 2>/dev/null || true
docker rm xingrin-watchdog 2>/dev/null || true
fi
}
# 启动 agent
start_agent() {
log_info "=========================================="
log_info " XingRin Agent 启动"
log_info "=========================================="
log_info "启动 agent 容器..."
# --pull=missing 只在本地没有镜像时才拉取,避免意外更新
docker run -d --pull=missing \
--name ${CONTAINER_NAME} \
--restart always \
-e SERVER_URL="${PRESET_SERVER_URL}" \
-e WORKER_ID="${PRESET_WORKER_ID}" \
-v /proc:/host/proc:ro \
${IMAGE}
log_success "Agent 已启动"
}
# 显示完成信息
show_completion() {
echo ""
log_success "=========================================="
log_success " ✓ Agent 已启动"
log_success "=========================================="
echo ""
log_info "管理命令:"
echo " - 查看日志: docker logs -f ${CONTAINER_NAME}"
echo " - 重启: docker restart ${CONTAINER_NAME}"
echo " - 停止: docker stop ${CONTAINER_NAME}"
echo ""
}
# 主流程
main() {
stop_old
start_agent
show_completion
}
main "$@"