Linux 上で systemd ユーザー単位により動作する OpenClaw ゲートウェイの模式図

2026 Linux systemd 上の OpenClaw:アップグレード後にホーム環境の食い違いで設定が空に見えるときの doctor 統合手順

systemd --useropenclaw gateway を動かすと、アップグレード後にactive なのに設定が空に見えることがあります。SSH と異なる HOMEXDG_CONFIG_HOME を読みスケルトン化しているケースが多く、本稿では三段階の切り分けとマージ手順を整理します。

1. 症状の三段階:プロセス/RPC/設定の空殻

プロセス層systemctl --user status が active でも、実際に開いている設定ルートが運用者のホームと一致しているとは限りません。WorkingDirectoryHOME が未設定のままだと、パッケージ付近にスケルトンができ、見かけ上チャネルやプラグインが消えたように見えます。

RPC 層openclaw gateway status でビルド ID と CLI のセマンティックバージョンが食い違う場合は、先に《split brain と meta.lastTouchedVersion》の手順を踏み、いきなりディレクトリを削除しないでください。

設定の空殻層:ディレクトリは存在するのに pluginschannels が空に見えるときは、別の XDG_CONFIG_HOME に書き込まれている可能性があります。アップグレードで探索順が変わると、旧バージョンのパスにだけ有効な JSON が残り、新パス側はスケルトンのままというパターンが典型です。

  1. journalctl --userENOENTHOME、設定パスに関する行を拾う。
  2. ログインシェル、非ログイン、systemctl --user show の三つの環境を並べて比較する。
  3. マージ前に必ず tar でスナップショットを取得する。

2. status から gateway status、ログ、doctor までの順序

公式の gateway プローブ手順》と同じく、まず待受と RPC を証明してから openclaw doctor に進みます。429 やプラグイン shape の疑いで HOME の取り違えを見逃さないようにしてください。

doctor の前後で openclaw gateway status を実行し、資格情報はチャネル安定後に最後へ移します。

3. 再起動のみ・マージ・install --force の判断表

短時間で判断するための表です。複数台ではカナリア一台で様子を見てください。

兆候 最初に行うこと リスク
HOME 未設定でスケルトン化 drop-in で HOMEWorkingDirectory を明示
旧パスに JSON、新パスは空 ブロックマージと meta 更新
CLI と GW の semver 分離 窓内で gateway install --force

4. 七ステップのマージと検証

ユニット名は実際の Id= に合わせて読み替えてください。

# ユーザー単位の実環境を確認
systemctl --user show openclaw-gateway.service -p Environment -p WorkingDirectory

# 対話シェルと比較
echo "$HOME" "$XDG_CONFIG_HOME"

# スナップショット(パスは環境に合わせて調整)
tar czf ~/openclaw-premerge-$(date +%Y%m%d%H%M).tgz ~/.openclaw ~/.config/openclaw 2>/dev/null
  1. 同一 JSON への同時編集と並列インストールを止める。
  2. root、ログインシェル、ユーザー単位の三つの環境変数ダンプを保存する。
  3. gateway status が示す設定ルートを正とする。
  4. channelscredentialsplugins を順にマージする。
  5. doctor の後に status とチャネル疎通を再確認する。
  6. ヘッドレスでは loginctl の linger を確認する。
  7. 変更票にセマンティックバージョン、drop-in のハッシュ、rollback 用 tar のパスを記録する。

5. 運用でそのまま印刷できるチェック表

当番向けの短い行です。

確認項目 コマンド/手掛かり 期待値
ユーザー単位の HOMEsystemctl --user show設定を所有するアカウントのホームと一致
lingerloginctl show-userSSH 切断後もユーザーマネージャが継続
ジャーナルjournalctl --user -u設定読み込みの ENOENT が連続しない

6. 関連記事との分担

split brain は semver と meta.lastTouchedVersion。Docker 記事は《Compose トークン》。macOS は《launchd 再起動》を参照し、Linux では User= と linger を優先します。

7. よくある質問

:スケルトンを消してから旧ファイルをコピーしてよいですか。:サービス停止とスナップショットが前提です。稼働中のコピーは JSON 破損の原因になります。

:root と一般ユーザーで二重にゲートウェイを起動したらどうなりますか。:ポートと設定ルートが衝突します。User= を明示し、余分なユニットを無効化してください。

8. まとめとリモート Mac への収束

正しい設定を読むには、HOME と XDG 系の変数を systemd の真実として揃え、公式の段階手順で RPC を検証することが先です。

自己ホストの Linux では drop-in の管理とマージ規律が常に必要で、アップストリームのリリース頻度が高いほど運用負荷も上がります。

ゲートウェイを安定したパスと Apple シリコン環境で長時間動かしたい場合は、SFTPMAC のリモート Mac レンタル とヘルプセンターの手順を参照し、毎週のマージ作業から注意力を解放する選択肢も比較してください。