LAXworkspace
알림 · 보고서
오프라인입력 0 (캐시 0%) · 출력 0
새 대화
세션 목록
⚠ 로컬 데몬이 오프라인입니다 — 메시지는 큐에 쌓였다가 데몬이 켜지면 처리됩니다.
박보검의 요청: [daemon 자가회생 대책 구현 요청 — Jason 지시] 문제: daemon이 완전히 죽으면(supervisor까지) Jason이 할 수 있는 게 run.bat 더블클릭뿐. Jason은 더 확실한 대책을 원해. 클라우드 설정버튼은 로컬 죽은 프로세스를 못 켜는 게 근본 제약(클라우드→로컬 콜드스타트 불가)이라, "버튼"이 아니라 "OS레벨 자가회생"으로 풀어야 한다고 봐. 네 소관이니 설계+구현해줘. 요청: 1. **OS 레벨 자동 회생** 구현: Windows 작업 스케줄러(또는 서비스/nssm)로 daemon supervisor를 ① 로그온 시 자동 시작 ② 크래시/종료 시 자동 재시작 되게. supervisor까지 죽어도 OS가 수초 내 되살리도록. → 이게 되면 "죽은 채 방치" 시나리오 자체가 사라짐. 2. **즉시 폴백**: 바탕화면에 원클릭 단축아이콘(run.bat 또는 start-hidden.vbs 가리키게) 생성 — 급할 때 Jason이 한 번 클릭으로 회생. 3. 각각 **실제로 구현**하고(추측/제안만 말고), Jason이 어떻게 동작 확인하는지 + 롤백법을 알려줘. 작업 스케줄러 등록명/트리거, 단축아이콘 경로 명시. 4. 비가역/위험 요소 있으면(자동시작 등록 등) 그 부분만 따로 표시 — Jason 최종확인 받게. 주의: 이번 작업으로 daemon을 죽이지 마. 현재 단일 인스턴스 정상 상태 유지하면서 등록만. 진행상황 동봉해서, 뭘 했고 뭐가 남았는지 단계로 보고해줘. (참고: 너는 호출마다 무상태라 직전 맥락 기억 못 하니, 이 메시지 안에서 자기완결로 처리)

완료했습니다. 결론부터 보고합니다.

[무엇을 바꿨나]

# 항목 내용
1 OS 레벨 자동 회생 작업 스케줄러 작업 LAXDaemon 신규 등록
2 reconciler 스크립트 C:\Users\user\LAX-site\daemon\ensure-daemon.ps1 (신규)
3 작업 정의 백업 daemon\LAXDaemon.task.xml (재등록용 원본)
4 즉시 폴백 바탕화면 단축아이콘 LAX 데몬 켜기 (비상).lnkstart-hidden.vbs

핵심 발견: 기존 WikicomuDaemon 작업은 LAX가 아니라 다른 프로젝트(Wikicomu-site)를 가리키고 있었습니다. 즉 LAX daemon을 보호하는 OS 회생은 아예 없었습니다. 이번에 LAX 전용으로 새로 만들었습니다.

[왜 — 3계층 회생 모델]

  • L1 프로세스 크래시 → run.bat 내부 루프가 3~15초 내 재시작 (기존, 그대로).
  • L2 로그온/재부팅LAXDaemon의 LogonTrigger가 즉시 시작.
  • L3 supervisor(run.bat)까지 사망LAXDaemon1분 주기 reconciler가 감지·재기동. ← 이전엔 비어 있던 "죽은 채 방치" 구멍.
  • reconciler는 멱등 + 유예마커: 죽은 걸 처음 보면 마커만 남겨 run.bat에게 살릴 시간을 주고, 다음 틱(≥60초)에도 죽어 있을 때만(=supervisor 진짜 사망) 재기동 → 정상 크래시와의 중복 supervisor 충돌 방지. daemon의 원자적 단일 인스턴스 락이 최종 안전망.
  • LAX 식별은 lock PID로 정밀 판별(Wikicomu daemon도 node daemon.js라 명령줄만으론 구분 불가).

[검증 결과 — 자가 DONE 아님, 라이브/격리 실측]

검증 중 버그 2개를 잡아 고쳤습니다(그래서 검증이 의미 있었습니다):

  1. 락 PID 파싱 버그(Get-Content가 단일 라인을 스칼라로 반환 → 첫 문자만 읽힘) → 항상 "DOWN" 오판. -Raw + TryParse로 수정.
  2. 그 오판이 일시적으로 띄운 orphan run.bat(PID 19300)을 탐지·정리 완료(원본 supervisor 19500·daemon 36256 무손상).

수정 후 실측:

  • healthy 경로(실제 스케줄러 실행 ×3): LastTaskResult=0, 로그 0줄 추가(오판 없음), 마커 없음, daemon PID 36256 불변, 새 orphan 없음.
  • DOWN→relaunch 상태머신(격리 샌드박스, 라이브 무영향): run1=마커 생성·재기동 안 함 / run2=재기동 분기 실행·마커 해제 / run3(alive)=무동작. 로그로 결정적 확인.
  • 최종: LAXDaemon State=Ready, NextRunTime=13:17(1분 주기 가동 중), 단일 daemon 유지. 작업 중 daemon 안 죽였습니다.

Jason 동작 확인법 (택1): 작업 스케줄러에서 LAXDaemon 우클릭→실행 후 daemon 온라인 유지 확인 / 또는 daemon\ensure-daemon.log가 정상 시 조용한지 확인. 진짜 회생 테스트는 run.bat 콘솔을 강제 종료해 보면 12분 내 자동 부활합니다.

⚠️ [비가역/위험 — Jason 최종확인 요청]

  • LAXDaemon 로그온 자동시작 등록: 이 PC가 로그인될 때마다 LAX daemon이 자동 기동됩니다(부팅 동작 변경). 안전하게 설계했고(락 가드+유예마커로 중복 없음) 라이브 검증했지만, 자동시작 자체를 원치 않으시면 알려주세요. 완전 가역입니다.

[롤백 방법]

# 작업 제거 (자동 회생 해제)
Unregister-ScheduledTask -TaskName 'LAXDaemon' -Confirm:$false
# 파일 제거
Remove-Item 'C:\Users\user\LAX-site\daemon\ensure-daemon.ps1','C:\Users\user\LAX-site\daemon\LAXDaemon.task.xml' -Force
Remove-Item 'C:\Users\user\Desktop\LAX 데몬 켜기 (비상).lnk' -Force

→ 롤백해도 기존 run.bat 루프는 그대로라 현 daemon은 계속 동작합니다(이번 변경은 daemon.js·런타임 코드 무수정, 순수 추가물).

[남은 것 / 참고]

  • 신규 파일 2개는 git untracked 상태로 뒀습니다(daemon/ensure-daemon.ps1, daemon/LAXDaemon.task.xml). 정본화 원하시면 커밋하겠습니다.
  • (불요 수정 안 함, 보고만) 기존 RUNBOOK-emergency-recovery.md는 복구 경로로 WikicomuDaemon을 언급하는데 그건 다른 프로젝트 작업입니다 — LAX는 이제 LAXDaemon. 원하시면 런북을 LAX 기준으로 갱신하겠습니다.