← 목록
기타 2026-06-26 4KB 읽기 4분

서버 자동 재가동 (부팅 복구 도구)

개요

재부팅 후 모든 크라우니 서버를 자동 복구하는 단일 진입점 도구. 기존엔 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건 수정(전부 가역, 라이브 무접촉):

    1. 로그인마다 대화상자 나그 → once-per-boot 가드
    - 근본원인: macOS LaunchAgent의 RunAtLoad부팅이 아니라 로그인/빠른사용자전환마다 발화. 같은 부팅에서 재로그인하면 auto가 매번 다시 떠 대화상자가 반복 → "잘 안됨"으로 체감. - 수정: 커널 부팅 epoch(sysctl -n kern.boottime)를 표식파일 .last_boot에 기록. 같은 부팅이면 auto가 0초에 조용히 건너뜀. 정상/취소 경로 포함해 부팅당 1회만 처리. - 검증: 표식=현재부팅 → auto 0s skip(기존 32s settle 회피). status에 "이번 부팅 처리: 완료/대기" 노출.

    1. 갓 부팅 시 거짓 다운 → 스마트 settle
    - 근본원인: 고정 8초 settle은 RunAtLoad 서비스 순차 기동 중 거짓 '다운'을 잡아 불필요한 대화상자 유발. - 수정: 다운 수가 두 번 연속 동일(안정)할 때까지 최대 ~32초 대기 후 판정.

    1. 한선씨 동반: 부팅가드.한선(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 호출 대상)