상시 가동 원격 Mac에서의 2026 OpenClaw:
launchd·systemd 재시작, 로그·디스크, Gateway 정체 분기

약 18분 읽기 · MACCOME

클라우드 Mac에서 OpenClaw Gateway를 24시간 돌릴 때, 첫 설치보다 자주 터지는 건 재부팅 후 복귀 실패, 로그가 디스크를 잠식, 프로세스는 살아 있는데 채널·모델이 침묵하는 패턴입니다. 이 글은 튜토리얼을 지나 OpenClaw를 프로덕션 인프라로 취급하는 팀을 위한 것입니다. 무인 운영에서 흔한 오해 여섯 가지, 프로세스·컨테이너·리버스 프록시 분기 표, 붙여 넣을 수 있는 launchd·systemd 스니펫, 로그·디스크 스냅샷, 여섯 단계 자가 복구 런북과 온콜 지표 세 가지를 담았습니다. 읽은 뒤에는 plist·Unit을 고칠지, 볼륨을 고칠지, 아니면 고정된 순서로 모델·채널 층으로 돌아갈지 판단할 수 있습니다.

무인 OpenClaw 오해 여섯 가지(프로세스가 떠 있다고 건강은 아님)

  1. launchd·systemd에 로드됐다고 준비 완료로 보기: 크래시 루프여도 로드 상태는 남습니다. 연속 가동 시간과 마지막 종료 코드로 판단하고, 목록 출력만 믿지 마세요.
  2. 컨테이너 안만 손보고 호스트 바인드 권한을 잊기: 컨테이너에서는 쓰기 가능해도 호스트 로테이션 스크립트에는 안 보이면 이중 기록이나 깨진 로테이션이 납니다.
  3. 리버스 프록시와 Gateway 루프백 괴리 무시: 제어 UI 정적 자산은 뜨는데 콜백은 공개 호스트명으로 간다. TLS 종단 엣지만 통과하는 127.0.0.1 curl 프로브는 모니터는 녹색인데 사용자는 빨간 상황을 만들 수 있습니다. TLS 리버스 프록시 가이드와 함께 읽으세요.
  4. 429·타임아웃을 전부 벤더 탓으로 돌리기: 무인 재시도 폭주는 스스로를 키웁니다. 프로바이더 라우팅 가이드에 맞춰 백오프·서킷 브레이킹을 넣으세요.
  5. 마스킹 없이 디버그 로그를 켠 채 두기: 토큰·웹훅·PII가 중앙 로그에 쌓이면 디스크가 차기 전에 컴플라이언스 리스크가 터집니다. SIEM으로 보내기 전에는 필드 화이트리스트를 선호하세요.
  6. 클라우드 Mac이 노트북과 같은 전원 정책을 쓴다고 가정: 절전·클램셸·유지보수 창이 장수 연결을 끊습니다. 잠들지 말아 달라는 말 대신 전원·데몬 재시작 정책을 문서화하세요.

이어서 프로세스가 보이는 것과 메시지 왕복을 분리하고, macOS·Linux 감독자로 이어집니다.

세 층 분기: 호스트 프로세스, 컨테이너 네트워크, 엣지 프록시

1층(호스트 프로세스)는 Gateway 바이너리·Node 프로세스가 올바른 사용자 아래에서 살아 있고, 의도한 인터페이스에 바인딩되며, 최신 토큰과 데이터 디렉터리를 보는지 묻습니다.

2층(컨테이너)는 compose 네트워크, 퍼블리시한 포트, 볼륨으로 좁힙니다. 호스트 curl과 컨테이너 내부 curl이 다르면 Docker 네트워크 분기 체크리스트부터 보세요.

3층(프록시)는 TLS, WebSocket Upgrade, 경로 제거, 타임아웃을 다룹니다. 엣지 502·핸드셰이크 이슈는 Nginx·Caddy 체크리스트를 따릅니다.

원격 Mac에서는 3층이 SSH 터널이나 사설 DNS 뒤에 있는 경우가 많습니다. localhost curl이 된다고 공개 콜백까지 된다고 보지 마세요. Slack·Telegram류 채널은 채널 트러블슈팅 체크리스트로 OAuth 범위도 확인하세요.

Gateway가 CI 빌드·cron과 같은 호스트를 쓰면 디스크 IO와 CPU 경합에 주의하세요. 빌드 스파이크가 로그 fsync와 TLS 핸드셰이크를 느리게 해 간헐적 타임아웃으로 보입니다. 빌드 캐시와 Gateway 데이터 경로를 분리해 모니터링하고, 둘 다 쓰기 속도에 알림을 걸어 인프라 지터를 모델 품질 퇴행으로 오진하지 마세요.

증상먼저 의심할 층다음 조치(실행 가능)
감독자는 실행 중인데 리스너 없음프로세스·plist·unit동일 사용자로 포그라운드 한 번 실행, WorkingDirectory와 ProgramArguments 확인
호스트는 OK, 컨테이너 안에서 업스트림 curl 실패컨테이너 네트워크compose 네트워크, 퍼블리시 포트, 잘못된 host 네트워킹 점검
도메인 502인데 루프백은 OK리버스 프록시proxy_pass, Upgrade 헤더, read_timeout 정합
UI는 OK, 채널 침묵채널·콜백 URL웹훅 URL과 TLS 체인이 릴리스와 함께 어긋나지 않았는지 확인
무작위 정체, 여유 GB 한 자릿수디스크·로그아래 표대로 du, 로그 레벨 낮추기
부하 높음, 모델 429모델 이그레스·큐스로틀·우회·백오프 연장, 살아 있는 파드를 liveness로 죽이지 않기

macOS launchd와 Linux systemd: 재시작 정책에 고정할 필드

launchdUserName, WorkingDirectory, stdout·stderr 경로, 그리고 KeepAlive와 짝을 이루는 ThrottleInterval을 명시해 크래시 폭풍이 호스트를 고정하지 못하게 하세요.

systemdRestart=on-failureRestartSec을 짝지우고, EnvironmentFileLimitNOFILE을 문서화합니다. 둘 다 SSH 세션이 끝난 뒤에도 서비스가 살아 있어야 한다는 점이 무인 운영과 대화형 디버깅의 핵심 차이입니다.

Docker가 Gateway를 감싸면 launchd·systemd는 보통 Node가 아니라 docker compose up -d(또는 래퍼)를 감독합니다. 건강 검사는 compose나 Kubernetes 헬스 체크 가이드에 설명된 HTTP 프로브로 옮겨, 얼어붙은 컨테이너를 호스트가 건강하다고 착각하지 않게 하세요.

launchd
<!-- 샘플 키만—경로·사용자·명령은 설치에 맞게 조정 -->
<key>KeepAlive</key><true/>
<key>ThrottleInterval</key><integer>30</integer>
<key>StandardOutPath</key><string>/var/log/openclaw/gateway.out.log</string>
<key>StandardErrorPath</key><string>/var/log/openclaw/gateway.err.log</string>
systemd
# /etc/systemd/system/openclaw-gateway.service (스니펫)
[Service]
Restart=on-failure
RestartSec=20
EnvironmentFile=-/etc/openclaw/gateway.env
LimitNOFILE=1048576

로그 용량, 로테이션, 마스킹(시크릿 자세와 동일한 경계)

로그·설정·데이터 경로를 분리해 마운트하면 백업과 쿼터가 독립됩니다. 로테이션은 호스트 평문 로그와 Docker json-file 드라이버를 모두 다뤄야 합니다. 그렇지 않으면 컨테이너를 지워도 디스크에 거대한 레이어가 남습니다. 최소한 Bearer 토큰, 웹훅 시크릿, 이메일, 채널 ID 꼬리를 마스킹하고, SIEM으로 보내기 전에는 취약한 블랙리스트 정규식보다 허용 필드 목록을 선호하세요.

설치 후 doctor 가이드와 짝을 이룹니다. 티켓에는 doctor 요약만 붙이고, 전체 환경 덤프를 채팅에 넣지 마세요.

중앙 로깅에서는 OpenClaw 전용 보존·샘플링 정책을 두세요. 사고 중에는 샘플링을 올리고, 변경 창이 끝나면 자동으로 되돌려 임시 디버그가 영구 기본값이 되지 않게 하세요.

경로 유형흔한 위치(예)확인·조치
Gateway 텍스트 로그/var/log/openclaw/ 또는 프로젝트 logs/du -sh + 임계 알림, newsyslog·logrotate
Docker 그래프그래프 드라이버가 관리docker system df, json-file 크기 상한
작업 디렉터리·캐시~/.openclaw, 빌드 캐시업그레이드 전 백업, 오래된 세션 파일 정리
루트 볼륨 여유/df -h, 여유 약 15% 미만이면 사람에게 페이지
bash
# 빠른 용량 스냅샷(경로는 설치에 맞게 조정)
du -sh /var/log/openclaw 2>/dev/null
docker system df 2>/dev/null
df -h /
warning

주의: 데이터를 지우기 전에 볼륨과 시크릿이 미사용인지 확인하세요. 프로덕션에서는 맹목적인 rm -rf보다 확장·로테이션을 선호합니다.

여섯 단계 자가 복구 런북(알림→사후 분석)

  1. 변경 표면 동결: 이미지 태그, compose 파일 해시, 최근 세 번의 프록시 인증서·DNS 수정을 기록합니다.
  2. 세 층을 한 번에 프로브: 호스트 리스너, 컨테이너 내부 업스트림, 공개 호스트명 curl·WebSocket에 타임스탬프를 붙입니다.
  3. 채널 상태 확인: HTTP 200만이 아니라 문서화된 상태·프로브 명령을 씁니다.
  4. 디스크·로그 성장 점검: du를 24시간 전과 비교해 로그 폭증을 잡습니다.
  5. 한정 재시작: 먼저 compose restart로 서비스를, 필요 시 호스트 재부팅, 종료 코드를 남깁니다.
  6. 사후 분석 템플릿: 근본 원인을 설정·네트워크·벤더·리소스로 버킷하고 알림을 재조정합니다.

온콜 지표 세 가지(수치화)

  1. 연속 가동 구간: 7일간 사람 손 없이 하루 최소 가동 시간. 계약 SLA 미만이면 디스크나 CPU를 스케일합니다.
  2. 일일 로그 증가 GB: 절대 증가량과 주간 추세를 보고 14일 앞 용량을 예측합니다.
  3. 거짓 정체 비율: Gateway만 재시작하면 사라지는 티켓 비율. 높으면 분기 순서가 틀린 것이니 모델 대 채널 증거를 먼저 모읍니다.

doctor, Docker, 프록시, Kubernetes 가이드와의 짝짓기

이 글은 원격 Mac에서의 장기 감독, 로그·디스크 위생, 정체 분기 순서를 다룹니다. doctor 가이드는 설치 후 검증, Docker 네트워크 체크리스트는 컨테이너 라우팅, 리버스 프록시 가이드는 TLS·WebSocket, 헬스 프로브 가이드는 오케스트레이터 의미를 다룹니다. 문서는 설치→네트워크→엣지→정상 상태 순으로 쌓아 런북 중복을 줄이세요.

노트북만으로 장수 OpenClaw 호스트로 쓰기 어려운 이유

절전 일정, 패치 주기, 로밍 네트워크는 SLA로 적기 어렵고, 일상 업무와 디스크·대역폭을 나눠 쓰면 정체와 로그 폭풍을 분리하기 힘듭니다. 계약된 전용 원격 Mac이면 전원 정책, 디스크 티어, 이그레스를 개인 습관에서 분리할 수 있습니다.

OpenClaw와 자동화에 CI 테스터와 같은 리전, 낮은 절전 확률, 예측 가능한 디스크·대역폭이 필요하면 MACCOME 클라우드 Mac이 더 안정적인 실행면을 제공합니다. 먼저 대여 요금을 확인하고, 지역별 주문 페이지를 여세요—싱가포르, 도쿄, 서울, 홍콩, 미국 동부, 미국 서부. 연결 절차는 고객 센터에서 확인하세요.

FAQ

재부팅 후에는 데몬과 설정 중 무엇을 먼저 보나요?

포그라운드로 설정이 읽히는지 증명한 뒤 plist·unit 환경과 경로로 돌아갑니다. 설치 단계는 설치 후 doctor·트러블슈팅 가이드를 참고하세요.

로그가 디스크를 채울 수 있나요?

가능합니다. 무인 환경에서 흔합니다. 로테이션·알림·파이프라인 마스킹을 넣으세요. 티어 비교는 Mac mini 대여 요금 페이지에서 하세요.

UI는 뜨는데 응답이 없나요?

모델, 채널, 큐 순으로 분기하고 재시작만 반복하지 마세요. 채널 트러블슈팅 체크리스트를 함께 읽으세요.

원격 Mac이 계속 절전되나요?

전원 설정을 조정하고 감독자가 다시 띄우도록 두며, 벤더 유지보수 창을 확인하세요. 연결 키워드는 고객 센터에서 검색하세요.