2026年 OpenClaw Gateway の定時バックアップと可観測性:Cron スケジュール、openclaw backup と JSONL ログをリモート物理 Mac 7×24 で再現する Runbook(書き込み増幅と jobs.json の落とし穴+FAQ)
無人の物理 Mac で OpenClaw を回す運用者には、再起動やディスク逼迫、静かな cron 失敗を踏まえたバックアップとログが必要です。本稿は 2026 年時点のプラットフォーム向け Runbook です。launchd または cron と同等の環境で openclaw backup を定刻実行し、JSONL でトリアージ可能な可観測性を用意し、jobs.json 破損と書き込み増幅の典型パターンを避けます。意思決定マトリクス、検証 7 ステップ、引用しやすい閾値、FAQ、および同一ホスト上のゲートウェイ面の絞り込みとの接続までまとめます。
1. 7×24 Mac ゲートウェイでバックアップとログが破綻する理由
プロセスが健全でも、復旧ストーリーが健全とは限りません。リモート物理 Mac は低ジッタの常駐デーモンに向いていますが、定時メンテナンスは macOS 特有の落とし穴を継承します。たとえば cron 下の縮小環境、APFS の空き容量の見え方、同一 JSON 状態ファイルへの二重ライターです。
- 環境のズレ:対話型 SSH ではログイン
PATH、nvm/fnm シム、解除済み Keychain を見ますが、cronは見ません。openclaw backupが「command not found」や資格情報欠落で失敗しても、稼働中ゲートウェイはトラフィックをさばき続け——誤った安心を生みます。 - ログ起因のディスク圧迫:冗長な JSONL をイベントごとに fsync したり、数 GB ファイルをコピーしてローテしたりすると、定常 I/O がゲートウェイ自身の尾部遅延に化けます。症状はチャネルのフレークに見え、APFS スナップショットや Time Machine が同じボリュームを奪い合うまで「ディスク満杯」と気づきません。
- 状態ファイルの競合:自動化が
jobs.jsonを編集しているあいだにゲートウェイがジョブチェックポイントを書き込むと、JSON の切り詰め・空スケジュール・再起動後に古いディスクコピーからジョブが「戻る」現象が起きます。バックアップ規律とあわせ、2026年 OpenClaw ゲートウェイ本番攻撃表面の削減:127.0.0.1 バインド、リバースプロキシと Tunnel によるリモート物理 Mac 向け Runbook で固めたホストと揃えると、リストア先の表面も既知になります。複数チャネル構成のヘルス境界は 複数チャネル OpenClaw ゲートウェイの doctor/18789/ホットリロード Runbook も参照してください。
2. スケジューラと保持の意思決定マトリクス
cron と launchd の選択、JSONL 保持とバックアップ頻度のバランスを決めるときの早見表です。「脆弱」列はオーナーとロールバック記載を変更票に必須にしてください。
| 観点 | 脆弱パターン | 本番の狙い |
|---|---|---|
| スケジューラ | 絶対パスなしで openclaw を叩く素の cron |
launchd plist の EnvironmentVariables と、終了コードを JSONL または syslog へ残すラッパー |
| バックアップ対象 | ワークスペース木だけで、ゲートウェイ設定とジョブ状態が欠落 | 設定・状態・資格情報参照(秘密値そのものは除く)・チャネル定義を列挙した単一マニフェスト |
| JSONL シンク | 1 ファイル無制限成長+日次 cp ローテ |
時刻/サイズでリネームローテし compress;ライタープロセスは 1 つ |
| オフボックス複製 | アーカイブ書き込み中にストリームアップロード | done/ へ原子移動のあと、帯域制限付き rclone/rsync |
| 可観測性 | 共有受信箱に流すメールのみの失敗通知 | バックアップ非ゼロ終了、jobs.json パースエラー、空き容量トレンドの構造化アラート |
| 長期安定 | バックアップをゲートウェイ稼働と無関係な別物扱い | ゲートウェイヘルスと同じ SRE チェックリスト(長期稼働時の熱・電源・プロセス監視を含む)をバックアップ運用と一体でレビュー |
3. 再現可能な 7 ステップ Runbook
ゲートウェイと同じサービスアカウントで実行し、シェルトランスクリプトを残してください。リストア障害はパスと権限の差分から追うもので、記憶からではありません。
- 棚卸しの固定:
openclaw.json、ワークスペースルート、jobs.json、チャネルトークン(参照のみ)、JSONL ディレクトリの絶対パスを wiki とラッパー先頭コメントに貼る。 - 対話バックアップの実証:SSH で
openclaw backup --output /var/tmp/openclaw-probe-$(date +%s).tar.zst(運用フラグは文書化どおり)を実行し、サイズ・ファイル一覧・チェックサムを確認。「先月は動いた」で飛ばさない。 - ラッパーの硬化:
/usr/local/sbin/openclaw-backup.shにset -euo pipefail、明示PATH=、JSONL または syslog へのログ、失敗時logger。サブコマンド失敗は非ゼロで終了。 - launchd でスケジュール:
StartCalendarIntervalまたはStartIntervalを/Library/LaunchDaemonsの plist に記述しlaunchctl bootstrapで読み込む。cron ならラッパーのみ呼ぶ——ワンライナー禁止。 - JSONL 可観測性の配線:1 行 1 JSON で
ts、level、channel、job_id、trace_idを揃える。ローテ済みファイルをログ基盤またはオブジェクトストレージへ。コンプライアンス要件なら object-lock も検討。 - オフボックス複製:アーカイブが
done/に着地したら帯域制限付き同期。ゲートウェイ I/O を飢餓させない。リモート検証が通るまでローカルは少なくとも 3 世代保持。 - 四半期リストア訓練:検証用 Mac で最新リモートアーカイブを展開し、
jq emptyでjobs.jsonを検証、重要設定を本番と diff。訓練中に手で編み出した手順はバグ票にする。
4. 書き込み増幅と jobs.json の落とし穴
書き込み増幅は、耐久性への善意から起きがちです。行ごと fsync、極小チャンクの gzip、ファイル全体を再読み再アップロードするシッパーなど、論理 1 イベントが複数フルブロック書き込みに化けます。対策はフラッシュのバッチ化(遅延上限例 1〜2 秒)、コピーではなくリネームローテ、同一ファイルを追うエージェントを 1 つに集約することです。
jobs.json は調整面です。典型失敗:Ansible が pretty JSON を書き、ゲートウェイが compact で上書き——最終書き込み勝ちで diff がノイズだらけになる;SIGKILL 中の部分書き込み;エディタの UTF-8 BOM;手編集の末尾カンマ。緩和策:jq -e . jobs.json を CI に載せる、mktemp && mv による原子置換、ファイルロックまたは排他メンテ窓、人間向け編集はレビュー付きバージョン管理。
5. 引用しやすい閾値
- バックアップ SLO:状態保持ゲートウェイは全日次フルバックアップを下限に。変化が激いワークスペースのみなら 6 時間おきの増分またはワークスペース限定も可。連続 2 回のスケジュール失敗、または説明のない設定変更で 7 日中央値比 50% 未満のサイズになったらページ。
- ディスク余裕:ボリューム使用率 85% でアラート、90% で新規スナップショットジョブをブロック。JSONL とバックアップステージングを載せる APFS コンテナは空き ≥20%。
- JSONL 成長予算:トラフィック増なしでゲートウェイあたり持続 ~5 MB/分を超えたら、重複ロガーやインシデント後のデバッグフラグ残りを疑う。
- jobs.json の鮮度:意図した編集後、ゲートウェイのリロードが 60 秒以内に新しい mtime を見るべき。見えなければ、実行中プロセスが読んでいるパスと編集パスが別です。
6. FAQ
対話型 SSH では openclaw backup が成功するのに、cron では失敗するのはなぜ?
cron は最小環境です。Node・openclaw・資格情報ヘルパーはログインシェルが載せた PATH にしかいないことが多いです。明示的な EnvironmentVariables と絶対パスを持つ launchd、または手検証と同じプロファイルを source するラッパーを使い、cron が SSH セッション状態を引き継ぐと仮定しないでください。
JSONL ゲートウェイログの書き込み増幅の原因は?
行ごと fsync、極小バッファの圧縮、ファイル全体コピーのローテ、同一シンクへの複数プロセス追記が実バイトを倍増させます。ライターを集約し、リネームローテにし、遅延上限付きで fsync をバッチ化します。
jobs.json を編集したあと、スケジュール済みジョブが消えたり戻ったりするのはなぜ?
同時書き込みと部分保存による不正 JSON がゲートウェイのパース対象を壊します。原子書き込み、リロード前の jq 検証、人間と自動化の同時編集禁止が有効です。
7×24 OpenClaw 用 Mac はバックアップとログのためにディスクをどれだけ空けておくべき?
データボリュームの空きは目標 20% 以上。7 日線形外挿で 85% に達しそうならページ。アップロード前にフルバックアップをローカルステージングするとスパイクする——ステージングはゲートウェイ状態とは別ディレクトリで見積もってください。
7. この運用スタックに Mac mini が合う理由
バックアップラッパーと JSONL パイプラインは地味なインフラですが、地味な処理ほど電力挙動が予測できる POSIX ホストが向きます。macOS には launchd、統合された APFS 運用、Apple Silicon のメモリ帯域があり、ネストした VM ネットワークの驚きが少ないため、SSH で叩いたスクリプトと 03:15 に発火するジョブが一致しやすくなります。
M シリーズの Mac mini は数ワット級のアイドルでも常時ゲートウェイ、ログシッパー、暗号化ステージングを同居できます。Gatekeeper・SIP・FileVault は、ゲートウェイを localhost に縛り TLS フロントだけを外向きにする——長期 OpenClaw 運用で採りがちな姿勢と整合します。
JSONL 可観測性と定刻 openclaw backup を、共有 VM のノイズではなく自分の管理下の静音ノードで回したいなら、Mac mini M4 はこのスタックに対してバランスの取れた無人マシンです。ZoneMac の専用ノードで同じ Runbook を Apple Silicon 上に再現できます。静音・低消費電力・長期安定性をまとめて押さえたい方は、今が手に取りやすいタイミングです。
7×24 OpenClaw 向け専用 Mac mini
ゲートウェイのバックアップ、JSONL パイプライン、launchd 定時メンテを、本稿と同じパス・権限の物理 macOS ノードで運用できます。