#!/bin/bash # ============================================================================= # Docker Registry 健康監控腳本 # 用途: 每 5 分鐘檢查 Registry 狀態,異常時自動重啟並發送通知 # Cron: */5 * * * * /home/wooo/momo_pro_system/scripts/registry_health_monitor.sh # ============================================================================= set -e # 配置 REGISTRY_URL="https://registry.wooo.work/v2/" REGISTRY_LOCAL_URL="http://127.0.0.1:5000/v2/" REGISTRY_DIR="/home/wooo/registry" REGISTRY_USER="admin" REGISTRY_PASSWORD="Wooo_Registry_2026" # Telegram TELEGRAM_BOT_TOKEN="" TELEGRAM_CHAT_ID="5619078117" # 日誌 LOG_FILE="/var/log/registry_health_monitor.log" log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" } send_telegram() { local message="$1" curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \ -d chat_id="${TELEGRAM_CHAT_ID}" \ -d parse_mode="HTML" \ -d text="$message" > /dev/null 2>&1 || true } # ============================================================================= # 健康檢查 # ============================================================================= check_registry() { # 檢查本地連線 local local_status=$(curl -s -o /dev/null -w "%{http_code}" "$REGISTRY_LOCAL_URL" --max-time 10 2>/dev/null) if [[ "$local_status" == "200" ]]; then log "✅ Registry 本地連線正常" return 0 fi log "⚠️ Registry 本地連線失敗 (HTTP $local_status)" # 檢查外部連線 local external_status=$(curl -s -o /dev/null -w "%{http_code}" \ -u "$REGISTRY_USER:$REGISTRY_PASSWORD" \ "$REGISTRY_URL" --max-time 10 2>/dev/null) if [[ "$external_status" == "200" || "$external_status" == "401" ]]; then log "✅ Registry 外部連線正常" return 0 fi log "❌ Registry 完全無法連線" return 1 } # ============================================================================= # 自動修復 # ============================================================================= auto_repair() { log "🔧 嘗試自動修復..." cd "$REGISTRY_DIR" || return 1 # 重啟 Registry docker compose restart sleep 10 # 再次檢查 if check_registry; then log "✅ 自動修復成功" send_telegram "✅ Registry 自動修復成功%0A%0A時間: $(date '+%Y-%m-%d %H:%M:%S')" return 0 else log "❌ 自動修復失敗" send_telegram "❌ Registry 異常%0A%0A自動修復失敗,請手動檢查%0A時間: $(date '+%Y-%m-%d %H:%M:%S')" return 1 fi } # ============================================================================= # 主程式 # ============================================================================= main() { if check_registry; then exit 0 fi send_telegram "⚠️ Registry 異常偵測%0A%0A正在嘗試自動修復...%0A時間: $(date '+%Y-%m-%d %H:%M:%S')" auto_repair } main