C1: 移除 deploy-to-110.sh 密碼明文,改用 SSH key + sudoers NOPASSWD I1: 加入 /var/lock/harbor-repair.lock 防止 watchdog 與 startup 並行修復 I2: docker compose 的 stderr 不再靜默(改用 tee -a log | while read 輸出) I3: watchdog while loop 包在子 shell + || true,子 shell 異常不終止 watchdog I4: repair_harbor 關鍵指令(harbor-log 啟動)加入退出碼捕捉 S1: 修復後驗證等待從 5s/10s 改為 30s(harbor-core 初始化需要足夠時間) S2: docker ps 改用 --filter status=exited 取代 grep/awk Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
問題根因: awoooi-startup-110.sh 在 Harbor 啟動時,第一次 compose up -d 會同時 啟動所有容器。harbor-core/db/portal 嘗試連 syslog:1514(harbor-log 未就緒), 失敗後 exit(128),restart:always 重試直到 backoff 放棄。 即使後來 harbor-log healthy,其他容器已不再重試。 修復 1 — startup-110.sh Harbor 時序(4 Phase 策略): Phase 1: 清除所有 Exited Harbor 容器(打破 backoff 死鎖) Phase 2: 只啟動 harbor-log Phase 3: 等 harbor-log healthy(最多 90s) Phase 4: 啟動全組件 修復 2 — harbor-watchdog.service(常駐自愈): Type=simple 常駐進程,每 60s 輪詢 http://127.0.0.1:5000/v2/ 不健康 → 等 5s 再確認 → 執行 Phase 1-4 完整修復 修復重開機時序問題無法覆蓋的「運行中崩潰」場景 Bug Fix:curl -f 會把 HTTP 401 視為失敗(exit 22), Harbor /v2/ 正常回傳 401(需認證),改用 curl -s 不加 -f REBOOT-RECOVERY-SOP.md → v5.0 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>