OpenClaw 구축·운영 (15/26) — Gateway와 24시간 무중단 자동화
macOS LaunchAgent를 활용한 서비스 데몬 운영 및 자가 진단 파이프라인
핵심 요약
- Gateway는 OpenClaw의 신경 중추이며, 죽으면 모든 게 멈춘다 — KeepAlive는 필수
- LaunchAgent 설치 후 타임존(TZ) 강제 주입을 누락하면 크론이 엉뚱한 시간에 실행된다
- Daily Audit 5단계 파이프라인으로 매일 새벽 시스템을 자동 진단한다
배경
운영 중 가장 당혹스러운 장애는 에이전트의 '침묵'이었다. Mac 재시작 후 텔레그램으로 메시지를 보냈으나 한 시간이 지나도 응답이 없었다. 원인은 단순했다 — Gateway 프로세스가 재시작 후 자동으로 켜지지 않았다. 이 장애를 계기로 모든 상주 프로세스를 OS 레벨(macOS LaunchAgent)로 격상하여 관리하는 아키텍처로 전환했다.
본문
Gateway 아키텍처
Gateway는 Node.js 기반 데몬 프로세스로, 18789 포트에서 로컬 연결만 허용한다.
- 통신 중재: 에이전트와 외부 채널(Telegram, Discord, Webhook) 간 메시지 라우팅
- 리소스 관리: LLM API 호출 및 연결 상태 모니터링
- 스케줄링: 시스템 내 모든 크론 작업의 실행 엔진
LaunchAgent 설치와 타임존 주입
openclaw gateway install
openclaw gateway status
설치 직후 반드시 타임존을 명시적으로 주입해야 한다. 이를 간과하면 크론이 UTC 기준으로 실행된다.
/usr/libexec/PlistBuddy -c \
"Add :EnvironmentVariables:TZ string Asia/Seoul" \
~/Library/LaunchAgents/ai.openclaw.gateway.plist
핵심 서비스 인벤토리
| 서비스 | 목적 | 실행 정책 |
|---|---|---|
| ai.openclaw.gateway | Gateway 메인 프로세스 | KeepAlive |
| com.openclaw.ollama-warmup | 로컬 모델 사전 로드 | 부팅 시 1회 |
| com.openclaw.ollama-proxy | 파라미터 주입 프록시 | KeepAlive |
| com.user.daily-audit | 보안 통합 감사 | 매일 05:00 KST |
| com.user.oc-update-check | 엔진 업데이트 확인 | 매일 06:00 KST |
Daily Audit 파이프라인
매일 새벽 5시에 구동되는 5단계 진단 프로세스:
- Phase A: 공식 문서 스냅샷 비교, 업데이트 사항 추출
- Phase B: 변경 사항 시 Headless Claude Code로 로컬 매뉴얼 동기화
- Phase C: 파일 포맷 검증, 엔티티 감사 등 12개 진단 스크립트 순차 실행
- Phase D: 결과를 JSON 파일로 저장, 로그 로테이션
- Phase E: 홈 서버로 전송 준비
Hot Reload와 크론 관리
- Hot Reload: 모델 교체, 프롬프트 수정 등은 재시작 없이 즉시 반영
- Cold Restart: 포트 바인딩, 인증 방식 변경 시에만 자동 재시작
sessionRetention: 24h설정으로 24시간 경과한 크론 세션 자동 폐기
시행착오 / 주의사항
- Gateway 구동 실패:
plutil명령으로 plist 유효성 점검 - 포트 점유 충돌:
lsof -i :18789로 좀비 프로세스 확인 - 설정 파일 오류: Gateway는 fail-closed 정책을 따른다. 콤마 하나 누락이면 시작을 거부하므로, 편집 후
python3 -m json.tool로 반드시 검증
마무리
수동 스크립트는 한계가 있다. LaunchAgent를 통한 서비스화가 진정한 무중단 운영의 시작이다. 타임존 누락 같은 환경 변수 문제는 당장 오류를 뱉지 않아 발견이 늦으므로, 설치 직후 확립해야 한다. Fail-closed 정책 덕분에 런타임의 예측 가능성은 높아지지만, 운영자의 설정 수정 실수에 무자비하다 — 설정 파일 검증 자동화는 필수다.
댓글
댓글 쓰기