/ 블로그

서버와 터미널 로그 이미지

2026 OpenClaw 데몬과 부팅 자동 실행: VNC 원격 Mac에서 launchd로 안정 운영·로그 점검

2026년 3월 25일 · 약 12분

수동 실행은 디버깅에 좋지만, 재부팅·재접속 뒤에도 복구하려면 macOS의 launchd가 표준입니다. VNC 원격 Mac에서 OpenClaw를 돌릴 때의 문제점, tmux/cron 대비 표, plist 예시, launchctl bootstrap, 로그 확인, 권한은 VNC에서 처리하는 흐름을 담았습니다. 실제 경로는 which openclaw로 확인하세요.

임대 노드는 겉으로 전용처럼 보여도 운영 정책·이웃 테넌트·유지보수 창이 겹칠 수 있습니다. plist 권한과 ProgramArguments 무결성을 팀 규칙으로 묶고, 비밀은 plist 평문 대신 키체인·제한된 설정 파일에 두세요. 짧은 runbook(5~10줄)만 있어도 야간 장애 대응이 빨라집니다.

감독 프로세스가 없을 때

  1. SSH 세션이 끝나면 포그라운드 프로세스도 종료.
  2. 절전·전원 정책으로 게이트웨이 포트가 사라질 수 있음.
  3. 키체인·개인정보 권한이 GUI 대기로 멈춤.
  4. stdout/stderr 파일 분리 없으면 사후 분석이 느림.
  5. 중복 실행·포트 충돌로 간헐 장애.

방식 비교

방식용도자동 시작크래시 후감사
터미널 전면디버그아니오아니오낮음
tmux중기 유지별도 스크립트수동중간
cron주기 작업일정상시 게이트웨이엔 부적합중간
LaunchAgent로그인 후 상시KeepAlive는 신중히높음

KeepAlive는 잘못된 설정 시 재시작 폭주 가능—로그로 먼저 안정화하세요.

6단계

1) 절대 경로와 인자 확정
2) ~/Library/LaunchAgents/com.example.openclaw.plist 작성
3) Label, ProgramArguments, RunAtLoad, 로그 경로 지정
4) plutil -lint로 검증
5) launchctl bootstrap gui/$(id -u) ...plist
6) 포트·err 로그·재부팅 테스트, 업그레이드 시 bootout 후 재등록
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0"><dict>
<key>Label</key><string>com.example.openclaw</string>
<key>ProgramArguments</key><array>
<string>/opt/homebrew/bin/openclaw</string><string>gateway</string>
</array>
<key>RunAtLoad</key><true/>
<key>StandardOutPath</key><string>/tmp/openclaw.out.log</string>
<key>StandardErrorPath</key><string>/tmp/openclaw.err.log</string>
</dict></plist>

API 키는 plist에 넣지 말고, EnvironmentVariables에는 PATH 등 비밀이 아닌 항목만 추가합니다.

WorkingDirectory와 로그 위치

상대 경로로 설정을 읽는다면 WorkingDirectory를 로컬에서 검증했을 때와 동일하게 맞춥니다. /tmp 로그는 재부팅에 지워질 수 있으니 장기 운영은 ~/Logs/openclaw/ 같은 사용자 디렉터리를 만들고 크기 제한·주기 삭제 정책을 정하세요.

KeepAlive와 재시작 폭주

설정 오류로 즉시 종료되는데 KeepAlive가 켜져 있으면 짧은 간격으로 무한 재시작하며 디스크를 채웁니다. 먼저 KeepAlive 없이 stderr를 읽고 안정화한 뒤 필요 시 Apple 문서의 간격 옵션을 검토하세요.

launchctl은 정상인데 서비스만 죽어 있을 때

손쉬운 사용·전체 디스크 접근·네트워크 첫 대화상자가 숨어 있는 전형적인 패턴입니다. SSH 출력만으로는 보이지 않으니 VNC에서 시스템 설정을 직접 확인하는 것이 가장 빠릅니다.

롤백 플레이북

  1. stderr 마지막 200줄과 plist를 티켓에 첨부.
  2. launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.example.openclaw.plist (도메인은 환경에 맞게).
  3. VNC에서 수동 기동으로 안정화 후 argv와 plist diff.
  4. plutil -lint와 리뷰 후 재 bootstrap.

업그레이드 당일 체크

바이너리 경로·기본 설정 폴더·서브커맨드가 바뀔 수 있습니다. VNC에서 한 번 대화형 실행으로 마법사를 닫고, 동작하는 argv를 적은 뒤 plist를 고치고 job을 다시 올리세요. 업그레이드 전후 1분간 stderr 줄 수를 비교하면 이상 폭주를 빨리 봅니다. 여러 관리자가 같은 임대 Mac을 쓰면 plist 소유자를 정하지 않으면 덮어쓰기 전쟁이 납니다.

비싼 APM 없이 최소 모니터링

launchctl print 종료 코드, stderr 파일의 최종 수정 시각, 콘솔 URL HTTP 검사만으로도 ‘완전 침묵’을 잡을 수 있습니다. 디스크 여유도 확인하세요. 로그 로테이션 없는 KeepAlive 루프는 하룻밤에 볼륨을 채울 수 있습니다.

포트 충돌과 이중 부트스트랩

같은 Label을 두 번 로드하거나, 수동으로 띄운 프로세스와 launchd가 같은 포트를 두고 경쟁하면 로그에는 간헐적인 bind 오류만 찍히고 원인 파악이 어렵습니다. 팀 규칙을 항상 launchd 한 줄기 또는 디버깅 시에는 반드시 bootout 후 수동 기동처럼 하나로 정리하고, 공유 문서에 포트 번호와 프로세스 매핑 표를 한 페이지만이라도 두면 인수인계 시간이 크게 줄어듭니다.

게이트웨이 보안의 최소선

0.0.0.0에 바인딩할지, SSH 터널 뒤에만 둘지는 위협 모델에 따라 다릅니다. 임대 Mac이라도 ‘나만 쓴다’는 가정으로 VNC 약한 비밀번호나 비밀 재사용을 허용하면 쉽게 피벗 지점이 됩니다. plist에는 경로와 플래그 정도만 두고 토큰은 OS 비밀 저장소나 팀 표준 시크릿 저장소로 옮기세요. runbook 맨 위에 이 두 문장만이라도 적어 두면 새벽 온콜이 반복 실수를 덜 합니다.

관련 글

자주 발생 문제 10가지 해결, 마이그레이션·VNC 가이드는 사이트 내 OpenClaw 카테고리를 참고하세요.

맺음말

launchd는 수명 주기 계약, VNC는 사람이 필요한 순간을 줄여 줍니다. 하드웨어 없이 유사 운영을 원하면 VNCMac 같은 VNC 원격 Mac과 이 체크리스트를 권합니다.

OpenClaw용 원격 Mac

요금 도움말