자주 나오는 장애: 어젯밤엔 Telegram이 됐는데 아침엔 침묵
세션 종속입니다. 대화형 셸의 게이트웨이는 ssh 끊김이나 터미널 종료로 죽습니다. 당직이 “서비스 다운”이라 부르는 현상 대부분은 앱 결함이 아니라 프로세스 트리 귀속 문제입니다.
업그레이드 드리프트입니다.npm i -g나 채널 전환 뒤 openclaw 경로가 바뀌었는데 plist가 옛 바이너리를 가리키면 기동이 들쭉날쭉해 보입니다.
컨테이너와의 혼동입니다.Docker는 자체 재시작 정책이 있습니다. 베어메탈 원격 Mac이나 VPS에서는 launchd·systemd를 명시하고 프로덕션 형태와 맞춥니다.
포그라운드만으로는 부족한 이유
프로덕션에는 예측 가능한 재시작, 표준 출력 영속화, 자원 상한이 필요합니다. 포그라운드만으로는 크래시 후 백오프나 로그 연계가 약하고 유지보수 창의 순서 있는 reload도 어렵습니다. 먼저 계단식 배제를 읽고 “연결됨”을 “유닛이 건강함”으로 바꿉니다. Nginx·Caddy 업스트림이 불안정하면 502가 늘고 TLS 탓으로 착각하기 쉽습니다.
업그레이드 기록에는 Node 마이너, OPENCLAW_ 환경 변수, 플러그인 디렉터리를 남기고 reload 전 openclaw doctor 스냅샷을 뜹니다.
macOS: launchd 최소 plist와 PATH
launchd에서는 ProgramArguments에 절대 경로를 쓰고 EnvironmentVariables로 PATH와 필요 시 NODE_BINARY를 넣습니다.StandardOutPath·StandardErrorPath는 로테이션 가능한 위치로.KeepAlive와 ThrottleInterval로 재시작 폭주를 줄입니다. 사용자 영역은 ~/Library/LaunchAgents, launchctl bootstrap으로 올리고 변경 뒤 kickstart -k입니다. 세부는 설치 경로와 대조합니다.
노트북 절전 정책은 백그라운드 작업에 영향을 줍니다. 상시 가동 Mac mini라도 로그아웃 뒤 사용자 에이전트가 멈추는 정책을 확인합니다.
Linux: systemd와 Restart, LimitNOFILE
[Service]에서 User, WorkingDirectory, ExecStart를 밝히고 openclaw gateway나 래퍼로 연결합니다.Restart=always와 RestartSec=로 백오프하고 LimitNOFILE은 연결 부하에 맞춥니다. unit을 바꾼 뒤에는 systemctl daemon-reload가 필수입니다.Docker 프로덕션과 비교할 때 벌 systemd는 호스트 I/O에 가깝고 컨테이너는 버전 고정에 강합니다.
journald를 쓰면 유닛별 로그 크기 상한을 두어 장애 시 디스크를 채우지 않게 합니다.
매트릭스: launchd, systemd, Docker 선택
| 환경 | 1순위 | 얻는 것 | 전형적 함정 |
|---|---|---|---|
| 장기 원격 Mac | launchd+로그 로테 | 로그인 세션 비의존 | PATH·Node 드리프트 |
| Linux VPS | systemd | journal과 자원 제한 | 사용자 unit과 root 혼선 |
| 다중 인스턴스 | 컨테이너+ compose | 이미지 핀 | 볼륨과 호스트 설정 불일치 |
| 개발만 | 포그라운드+ tmux | 빠른 반복 | 크래시 복구 없음 |
쓰는 법은 성공 관측 신호(systemctl is-active, 포트, doctor에 새 CRITICAL 없음)를 먼저 정한 뒤 행을 고릅니다.
구현 뼈대(교육용)
# macOS: ~/Library/LaunchAgents/com.example.openclaw.gateway.plist
# ProgramArguments: /절대경로/openclaw gateway
# KeepAlive / ThrottleInterval 검토
# launchctl bootstrap ...
# Linux: /etc/systemd/system/openclaw-gateway.service
# Restart=always / RestartSec=5
# systemctl daemon-reload && systemctl enable --now openclaw-gateway
프로덕션에는 사용자, 환경 파일, 권한, 변경 관리를 더하고 업그레이드 후 경로 검증을 반복합니다.
헬스 체크와 로그 기준
런북에 openclaw status 비영, gateway 서브커맨드 이상, doctor CRITICAL 증가, 단일 로그 비대 중 두 가지 이상을 묶어 알림으로 적습니다. 백오프는 지수나 고정 간격으로 하고 채널 재연결 폭풍과 겹치지 않게 합니다.
같은 숫자를 SFTPMAC 호스팅 원격 Mac 인수 기준에도 써서 “느낌상 통함”에서 벗어납니다.
FAQ와 호스팅 의미
cron으로 매분 띄워도 됩니까
주 수단으로는 부적합합니다. systemd·launchd 재시작 의미와 중복되고 순차 업그레이드를 깨기 쉽습니다.
Docker와 systemd를 동시에 쓰면
이중 관리는 피하고 경계를 런북에 하나로 고정합니다.
doctor는 초록인데 채널만 끊깁니다
상위 프록시나 DNS를 의심하고 게이트웨이 재시작만 반복하지 않습니다.
요약: 데몬화는 세션과 크래시 복구 문제를 풀고 매트릭스는 launchd·systemd·컨테이너 선택을 돕습니다.
한계: 자체 노드는 OS 패치, 로그, 키 로테이션을 안고 갑니다.SFTPMAC은 7×24 운용과 절차를 묶어 시행착오를 줄입니다.
호스팅 원격 Mac으로 게이트웨이 입구와 운영 절차를 맞춥니다.
