서버 자동 재가동 (부팅 복구 도구)
개요
재부팅 후 모든 크라우니 서버를 자동 복구하는 단일 진입점 도구. 기존엔 124개 LaunchAgent + 35종 통합 서비스가 제각각
RunAtLoad로 떠서 "이미 있는데 잘 안됨" 상태였다. 이를 하나의 부팅 복구 스윕으로 통합하고,
"자동으로 크라우니 서버를 재가동할까요?" 5초 무응답 시 자동 재가동 대화상자를 얹었다.
무엇을 했는지
/Users/ef/crowny-boot/부팅재가동.sh — 마스터 오케스트레이터
auto: 부팅용. 8초 settle → 다운 점검 → 5초 default-yes 대화상자 → 무응답/지금재가동/GUI없음이면 재가동, 취소면 중단
now: 대화상자 없이 즉시 재가동 / ask: 대화상자만 / status: 현황 / install·uninstall: 부팅 LaunchAgent
재가동 = 로드된 모든 *crowny* LaunchAgent 부드럽게 kickstart(-k 없음) + 게이트웨이 단일 보장 + crowny-services/manage.sh start(35종)
/Users/ef/crowny-boot/부팅재가동.한선 — 동반 4상 판정 로직(정상/재가동/모름). 컴파일·실행 검증 완료, 학습DB 등록(부팅재가동_4상판정)
~/Library/LaunchAgents/com.crowny.boot-restart.plist — RunAtLoad, 로그인 시 auto 실행 (설치·로드 완료)동작 검증
status: 35종 중 0종 다운, 판정 "정상"
- 대화상자:
giving up after 5 → 무응답이면 TIMEOUT → PROCEED(재가동), "취소"면 ABORT. 검증 통과.
- 한선씨: down=3→"재가동", down=0→"정상"
2차 세션 보강 (2026-06-26 오후, win824 재개)
"이미 있는데 잘 안됨" 증상의 실제 코드상 원인을 짚어 2건 수정(전부 가역, 라이브 무접촉):
- 로그인마다 대화상자 나그 → once-per-boot 가드
- 근본원인: macOS LaunchAgent의
RunAtLoad는
부팅이 아니라
로그인/빠른사용자전환마다 발화. 같은 부팅에서 재로그인하면
auto가 매번 다시 떠 대화상자가 반복 → "잘 안됨"으로 체감.
- 수정: 커널 부팅 epoch(
sysctl -n kern.boottime)를 표식파일
.last_boot에 기록. 같은 부팅이면
auto가 0초에 조용히 건너뜀. 정상/취소 경로 포함해 부팅당 1회만 처리.
- 검증: 표식=현재부팅 →
auto 0s skip(기존 32s settle 회피). status에 "이번 부팅 처리: 완료/대기" 노출.
- 갓 부팅 시 거짓 다운 → 스마트 settle
- 근본원인: 고정 8초 settle은 RunAtLoad 서비스 순차 기동 중 거짓 '다운'을 잡아 불필요한 대화상자 유발.
- 수정: 다운 수가 두 번 연속 동일(안정)할 때까지 최대 ~32초 대기 후 판정.
- 한선씨 동반:
부팅가드.한선(4상 건너뜀/진행/모름) 신규 — 컴파일 OK, 3케이스 검증, 학습DB 등록(부팅가드_4상판정). 가드는 순수 산술비교라 로그인 시 crownyc 의존을 피해 bash 글루에 두고, 4상 판정 정본은 한선씨로 동반(설계 결정).
잔여 이슈 (사용자 결정 대기 — 비가역이라 보류)
무인 재부팅 자동복구 = 자동 로그인 ON 필요(보안 트레이드오프): macOS는 로그인 전엔 user LaunchAgent를 로드하지 않음. 자동 로그인 없이 진짜 무인 복구를 하려면 root LaunchDaemon(/Library/LaunchDaemons, sudo 필요·GUI 대화상자 불가)로 가야 함 → 둘 다 비가역/권한상승이라 자율 진행하지 않고 사용자 결정 대기.
옵션 A: sysadminctl -autologin on -password <pw> (간단, 디스크 비번 평문 저장 위험)
옵션 B: root LaunchDaemon으로 시스템 부팅 시 복구(대화상자 없이 무조건 재가동, sudo 필요)
현 상태로도 사람이 로그인하는 일반 재부팅은 1회 점검+5초 default-yes 자동복구로 정상 동작.관련 파일
- /Users/ef/crowny-boot/부팅재가동.sh (once-per-boot 가드 + 스마트 settle 추가)
- /Users/ef/crowny-boot/부팅재가동.한선 (다운수→정상/재가동/모름)
- /Users/ef/crowny-boot/부팅가드.한선 (부팅 epoch→건너뜀/진행/모름, 신규)
- ~/Library/LaunchAgents/com.crowny.boot-restart.plist
- /Users/ef/crowny-services/manage.sh (start 호출 대상)