#!/bin/sh set -eu : "${CONSUL_HTTP_ADDR:?need CONSUL_HTTP_ADDR}" : "${SERVICE_NAME:?need SERVICE_NAME}" : "${SERVICE_ADDR:?need SERVICE_ADDR}" : "${SERVICE_PORT:?need SERVICE_PORT}" SERVICE_ID="${SERVICE_ID:-${SERVICE_NAME}-${SERVICE_ADDR}-${SERVICE_PORT}}" SERVICE_TAGS="${SERVICE_TAGS:-}" CHECK_TYPE="${CHECK_TYPE:-tcp}" # tcp|http CHECK_PATH="${CHECK_PATH:-/healthz}" # http 模式才用 CHECK_INTERVAL="${CHECK_INTERVAL:-10s}" CHECK_TIMEOUT="${CHECK_TIMEOUT:-2s}" DEREG_AFTER="${DEREG_AFTER:-1m}" # 组装 Tags 的 JSON 数组 if [ -n "$SERVICE_TAGS" ]; then # 逗号分隔转 JSON 数组 TAGS_JSON=$(printf '%s' "$SERVICE_TAGS" | awk -F, ' BEGIN{printf "["} {for(i=1;i<=NF;i++){gsub(/^ *| *$/, "", $i); printf "%s\"%s\"", (i>1?",":""), $i}} END{printf "]"} ') else TAGS_JSON="[]" fi # 组装 Check JSON if [ "$CHECK_TYPE" = "http" ]; then CHECK_JSON=$(cat < /tmp/service.json < ${SERVICE_ADDR}:${SERVICE_PORT} ..." curl -fsS -X PUT -d @/tmp/service.json "${CONSUL_HTTP_ADDR}/v1/agent/service/register" echo "[registrar] done." # 阻塞防退出(可选) tail -f /dev/null