From 566280f4c5ff620d3e2ec924d2cd653fddf26024 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 7 Apr 2026 10:55:02 +0000 Subject: [PATCH] Fix Phase 7 crash + improve error handling across all phases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fixed: farmq.db empty date strings causing API 500 error - Phase 7: exit 1 → return 1 (skip and continue instead of crash) - Phase 4/7 failures no longer kill the script - Error trap now shows current progress info (pharmacy, VPN IP, CT VMID, etc.) - Helps debugging when script fails mid-execution Co-Authored-By: Claude Opus 4.6 (1M context) --- pharmq-setup.sh | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/pharmq-setup.sh b/pharmq-setup.sh index e1565ee..bd3442a 100644 --- a/pharmq-setup.sh +++ b/pharmq-setup.sh @@ -772,12 +772,14 @@ JSONEOF else print_err "pharmacy_code 추출 실패" print_info "응답: $PHARMACY_RESPONSE" - exit 1 + print_warn "Phase 7을 건너뛰고 계속 진행합니다." + return 1 fi else print_err "약국 생성 실패" print_info "응답: $PHARMACY_RESPONSE" - exit 1 + print_warn "Phase 7을 건너뛰고 계속 진행합니다." + return 1 fi # 7-2. PVE host 장비 추가 @@ -939,7 +941,25 @@ phase8_verify() { # ============================================================ # 에러 핸들링 # ============================================================ -trap 'echo -e "\n${RED}❌ 설치 중 오류가 발생했습니다 (line $LINENO). 로그를 확인해주세요.${NC}"; exit 1' ERR +error_handler() { + local exit_code=$? + local line_no=$1 + echo "" + echo -e "${RED}════════════════════════════════════════════${NC}" + echo -e "${RED}❌ 오류 발생 (line ${line_no}, exit code ${exit_code})${NC}" + echo -e "${RED}════════════════════════════════════════════${NC}" + echo -e "${YELLOW}현재까지 진행된 정보:${NC}" + [ -n "${PHARMACY_NAME:-}" ] && echo -e " 약국명: ${PHARMACY_NAME}" + [ -n "${PVE_VPN_IP:-}" ] && echo -e " PVE VPN IP: ${PVE_VPN_IP}" + [ -n "${CT_VMID:-}" ] && echo -e " CT VMID: ${CT_VMID}" + [ -n "${CT_VPN_IP:-}" ] && echo -e " CT VPN IP: ${CT_VPN_IP}" + [ -n "${VM_VMID:-}" ] && echo -e " VM VMID: ${VM_VMID}" + [ -n "${PHARMACY_CODE:-}" ] && echo -e " 약국 코드: ${PHARMACY_CODE}" + echo "" + echo -e "${YELLOW}이 정보를 개발자에게 전달해주세요.${NC}" + exit 1 +} +trap 'error_handler $LINENO' ERR # ============================================================ # 메인 실행 @@ -957,10 +977,10 @@ main() { phase1_repo_fix phase2_tailscale_pve phase3_collect_info - phase4_pbs_restore + phase4_pbs_restore || print_warn "Phase 4 실패 — 계속 진행" phase5_create_ct phase6_setup_ct - phase7_register + phase7_register || print_warn "Phase 7 실패 — 수동 등록 필요" phase8_verify }