AI / 自動化 2026年4月28日

2026-04-28 ヘッドレスレンタルクラウド Mac(HK / JP / KR / SG / US)での OpenClawlaunchd KeepAlive終了コードThrottleInterval再起動/クラッシュループ トリアージ

MacXCode エンジニアリングチーム 2026年4月28日 読了約 20 分

多くのOpenClaw本番はMac mini M4SSHのみ、127.0.0.1の逆プロキシ、構造化ログで追う JSON です。launchd管理のゲートウェイで最終的に当たるのは LLM の謎挙動ではなく、終了後高速にジョブが再起動すること—時に(launchd常時走らせた)良性、時に設定欠落PATH/初回 bind 前クラッシュなどの致命傷。この2026-04-28深掘りは上流 HTTP 圧力Webhook 背圧からローカル監視へ橋渡し:KeepAliveThrottleIntervalの相互作用、騒がしい再起動時に StandardError最初の致命行を読む方法、対話シェルで再現するための LaunchAgent unloadのタイミング。環境と launchdの秘密物語やopenclaw doctor+許可リストとも補完します。

ヘッドレスクラウド Mac では launchd があなたの init

ノート PC と違い、npmopenclaw gatewayが終了するときに誰も端末を見ていません。長持ちする型は専用サービスアカウントに入れ、ログをローテし、launchdにライフサイクルを任せること。2026年の典型の誤りは macOS を Linux systemdと一対一で比較すること:KeepAliveRunAtLoadは強力だが明示的スロットルがなく、2 秒のタイプミスが毎時数千回execveになりかねません—~/Library/Logsとリモートログ転送も満タンに。プロセス終了を一次信号として扱い、「また落ちたしょうがない」としない。

  • ユーザー LaunchAgents — 長時間ユーザーサービスは~/Library/LaunchAgents;多くの OpenClaw が最小権限でここに。
  • システム LaunchDaemons — 管理者権限が要り半径が広い;root 文脈が本当に要る場合以外は避ける。

KeepAlive:どの味をオンにしたか

Apple の KeepAlive plist は真偽値か、(ネットワークやパスなど)条件付き理由の辞書です。真偽 trueは大鎚:理由の如何を問わず終了したら再起動—24/7 ネットワークデーモンには向くが、ワンショット移行には誤り。NetworkStateや必須パスはより繊細。「なぜ再起動?」のデバッグではまずlaunchd に生かせと頼んだか、アプリ自身が exit しているか(exit≠クラッシュか)を読む。KeepAlive trueの世界ではきれいな exit 0 でも再起動が走る—子を誤って切り離したラッパーがexitしたときそのものです。

ヒューリスティック(2026-04-28):再起動間隔が ThrottleIntervalに秒単位で揃うなら監督器が鎚;定常リズムのないフラップなら未処理の promiseかポート競合を疑い、LLM を疑わない。

StandardOut/StandardError は実ファイルへ

ヘッドレスSSHは TTY ではなく、stdio を「無」にするとクラッシュ頭の 200 ms を失います。StandardOutPath/StandardErrorPath をサービスユーザーが書けるディレクトリへ、macOS newsyslogか日次 cron で回し、対話シェルのスクロールバックに依存しないegress/TLS障害と突き合わせるなら、同一タイムスタンプで stdoutnginx・ゲートウェイ JSON を一枚に揃える方が Grafana だけより価値があります。

ThrottleInterval:再起動のブレーキ

ThrottleIntervallaunchdが再起動を主導するとき、終了から翌回起動までに待つ最短秒です。立ち上げでログを静めたい初期は10、定常では一時ロックからの復帰を運用を寝させずに済ませたいなら1〜2launchctl print gui/$(id -u)/com.example.openclaw(ユーザー領域、ラベルは合わせる)で状態と最終終了を読み、オンコールへ「Throttle=10 なら最悪でも 10s に一度まで」と書いておけば、ソフトウェア向けMTTR < 1 minを聞かれたときinfraと区別できます。

openclaw doctorはクラッシュループでも通ることがある—doctor はログイン環境一式の対話・短命バイナリだからplist に nodeやグローバル npmPATHが欠けているかもしれません。常に env | sortdoctor 出力を diff。

チケットで実際に目にする終了コード

終了/症状 有力な OpenClaw 起因 最初にすること
1(汎用)+ stderr に一行スタック 設定解析、欠落 OPENCLAW_、誤cwd 同じ ProgramArgumentsset -a; source your.env; set +a で SSH 実行:秘密パターン
2(misuse)シェルラッパ由来 オプション解析や Mac のパス引用符 argv をログ、glob 回避、arm64 を求めるなら Rosetta でないか確認(SSH プロファイル)。
126127 実行不可または plist の PATHnodeなし 絶対パスとサービス文脈の which -a node
シグナル 9/(Linux で言う exit 137)— macOS は素の kill が多い OOM、手動 kill、(稀に) watchdog — M4 で LLM+ゲートウェイ両方の RAM Console の memory pressureまたはプロバイダ整形で並列を下げる。

モデルを変える前の六つの問い(クラッシュループ)

  1. ポート使用中?迷子ゲートウェイ/ゾンビで bind が失敗;nginxとポート整合を。
  2. ループ内 exit 0?execせず終了したラッパーでもKeepAliveは走ることがある。
  3. stderr は毎回同じか?一行決定的→設定;スタックが変わる→競態やネット揺らぎ。
  4. 最後の変更は? git tag/npm lock;App Store でなくともリリース規律が効く。
  5. 401 をリトライし続ける? 断路器が要り、よりKeepAliveではない—429/503 はLLM 制限へ。
  6. 鎚をスロットルした?まずログを読むためのThrottleInterval、その後コード/設定へ。
ログ衛生:クラッシュループでは再起動頻度を下げてから log stream --style compact --predicate 'process == "openclaw"' を。雑音が最初の一行を吞みます。

Plist 運用チェック(Notion に貼る)

  • Label — 一意の逆 DNS;同じUIDで他人のcom.プリフィクスを使い回さない。
  • ProgramArguments[0] — フルパス;ログインシェルの驚異を無くす。
  • WorkingDirectory — 設定相対パスはopenclaw doctor と一致させる。
  • EnvironmentVariablesHOMEPATH、やむなしのNODE_OPTIONS — 秘密文書へ揃える。
  • KeepAlive + ThrottleInterval — 激しく再起動しろと stderr を細くしろを同時にしない(ローテなしでは特に)。

plutil -lint ~/Library/LaunchAgents/com.yourorg.openclaw.plist launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.yourorg.openclaw.plist

ページが「SG で OpenClaw ダウン」のときの 7 手順

  1. エッジの健全性(nginx)— 502 と 504 で上流とゲートウェイを切り;外向き失敗はDNS/TLSも確認。
  2. launchd 状態launchctl printでラベル、最終終了とスロットル窓。
  3. ログを安定 — まだフラップなら ThrottleInterval
  4. 対話再生 — 同一 UIDlaunchdなし。
  5. 設定 diffと秘密のローテーションを二人レビュー。
  6. ロールフォワード は既知の良いnpmへ;本番の謎パッチへではない。
  7. 事後 — チケットに短文:根本原因、検知ギャップ、護欄(例:1 分非ゼロ終了コード)。

FAQ:launchd と OpenClaw ゲートウェイ本体

質問 2026-04-28 回答
ProcessTypeを Interactive に? サーバーデーモンなら大抵no;Interactive は優先度を変える。負荷クラスについて Apple が推奨するときのみ。
caffeinate は必須? データセンター24/7のレンタルMac mini M4電源ポリシーで睡眠無効が普通;ノート型(MacXCode ではない)でも、再開時クラッシュならcaffeinateでは直らない。

この手順書に Mac mini M4 が出続ける理由

launchd の正直さは下のハードまで届く。ベアメタルの Mac mini M4香港・東京・ソウル・シンガポール・米国1〜2 TB、予測可能な CPU スケジュール)は「ツール呼び出し過ぎで OOM?」を測れる問いにできる。ローカル ML にも強いコアがログ転送と逆プロキシとスタック全体をひとつの課金ユニットに収め、単独ユーザーに縛られたラップトップから卒業するとき地域料金アクセス手順をセットで読む理由になります。

launchd/ログ/ネットが揃う場所で OpenClaw を動かす

1–2 TB · Apple Silicon · SSH/任意 VNC