Table of Contents
밖에서 PC 접속이 어렵기에 나는 OpenClaw가 영원히 살아있기를 원한다. 그리고 몇 가지 시행착오를 겪었다. 여기에 계속 업데이트 할 예쩡.
KeepAlive
OpenClaw가 스스로 죽이는 멍청한 행동을 할 때가 있다. 그래서 죽어도 계속 살아있도록 launchd KeepAlive 이용해 OpenClaw 를 실행했다.
Auto Restart (Gateway, Telegram)
그런데 또 어느날 동작을 안했다. 보니까 Telegram -> OpenClaw 전달 경로 자체가 불안정한 것이 원인. Telegram 에서 메시지 보내도 응답이 없었다. 집가서 확인해보니 OpenClaw 프로세스 자체는 살아있었다. 그러나 telegram 쪽에서는 fetch fallback 이 반복되거나 polling 경로가 불안정한 로그가 존재했다.
저번에 OpenClaw Gateway가 멋대로 죽었기도 했어서
- OpenClaw Gateway 통신(rpc) 실패 시 즉시 restart
- telegram degraded 연속적으로 실패할 때 restart
두 곳에 대해 Watchdog 같은 것으로 Auto Restart 하도록 구성했다.
SSH, Control UI
하지만 이것도 좀 불안하다. 내가 마주하지 못한 어떤 상황이 있을지 모르고 그래서 원격으로도 접근할 수 있도록 구성했다.
Tailscale을 사용했다. Mesh VPN(P2P) 기반으로 동작한다고 한다. ssh 및 OpenClaw Control UI를 tailnet(vpn) oply로 열어, 외부에서도 상태 확인이나 직접 restart 가능하게 구성했다.
OpenAI Token Expired
⚠️ Agent failed before reply: OAuth token refresh failed for openai-codex: Failed to refresh OAuth token for openai-codex. Please try again or re-authenticate.
Logs: openclaw logs --follow
그렇게 마음놓고 있었는데, 어느날 메시지 보내니 이런 응답이 계속 전달되었다. 이건 해당 PC에서 openclaw models auth login --provider openai-codex 명령으로 OpenAI 재로그인해 토큰 새로 발급받으면 해결된다. 문제는 그 로그인이 브라우저를 이용해야 한다는 것.
그래서 이것도 결국 집에 와서야 고쳤다. 이건 조금 우회하는 방식을 이용했는데, TTL이 10일정도밖에 안되어서 Refresh Token 이용해 만료 3일 전부터 아래와 같은 시도 & 메시지 전달되게 했다.
### 1. 알림 기준
- 만료 3일 초과: 알림 없음
- 만료 3일 전 ~ 1일 전: 24시간마다 알림
- 만료 1일 이내: 6시간마다 알림
- 이미 만료 후: 6시간마다 알림
### 2. 알림 시각에 하는 일
알림 시각이 오면, 순서는 항상:
1. 현재 access token 만료 상태 확인
2. refresh token으로 1회 재발급 시도
3. 성공/실패와 상관없이 알림 발송
4. 알림 본문에 refresh 결과 포함
즉, **"알림 타이밍 = refresh 시도 타이밍"**
### 3. refresh 결과 처리
- 3일~1일: 하루 1번
- 1일 이하/만료 후: 6시간마다
성공
- 알림은 반드시 1회 발송
- 알림에:
- 재발급 성공
- 이전 만료시각
- 새 만료시각
- 다음 알림은 새 만료시각 기준으로 재계산됨
- 이후에는 새 expiry 기준으로 다시 3일 전까지 조용히 대기
실패
- 알림은 반드시 1회 발송
- 알림에:
- 재발급 실패
- 가능하면 실패 사유/코드
- 현재 만료시각 또는 이미 만료 여부
- 재로그인 액션 안내
- 이후 cadence는 현재 상태 기준으로 계속
전달되는 메시지
[openclaw] Codex access token alert (1 day or less remaining)
Model: openai-codex/gpt-5.4
Profile: openai-codex:default
Checked (KST): 2026-03-28, 3:15:50 p.m.
Previous expiry (KST): 2026-03-28, 9:15:50 p.m.
Previous remaining: 0d 12h 0m
Refresh result: skipped
Refresh detail: Dry run: refresh request not sent.
Current expiry (KST): 2026-03-28, 9:15:50 p.m.
Current remaining: 0d 12h 0m
Current status: 1 day or less remaining
동작 성공도 확인했다 -> OpenClaw 사용기(지속적인 업데이트)