OpenClawSkills
GitHub
Gateway / Operations • 5分で読める

バックグラウンド実行(Exec / Process)

バックグラウンド実行とプロセスセッション管理

OpenClaw は exec ツールでシェルコマンドを実行し、長時間ジョブをメモリに保持します。process ツールでこれらのバックグラウンドセッションを管理します。

Tutorial.step

Exec ツール

主要パラメータ:

  • command (required)
  • yieldMs(デフォルト 10000):この遅延後に自動でバックグラウンド化
  • background(bool):即時バックグラウンド化
  • timeout(秒、デフォルト 1800):タイムアウト後にプロセスを終了
  • elevated(bool):elevated モードが有効/許可されている場合にホスト上で実行
  • 本物の TTY が必要なら pty: true を設定。
  • workdir、env

Behavior:

  • フォアグラウンド実行は出力をそのまま返します。
  • バックグラウンド化(明示またはタイムアウト)すると、status: "running" + sessionId と短い末尾出力を返します。
  • 出力は poll/clear されるまでメモリに保持されます。
  • process ツールが許可されていない場合、exec は同期実行になり yieldMs/background を無視します。
Tutorial.step

子プロセスのブリッジ

exec/process ツールの外側で長時間の子プロセス(例:CLI の respawn や Gateway ヘルパー)を生成する場合は、子プロセス・ブリッジヘルパーを付与して終了シグナルを転送し、exit/error 時にリスナーを detach してください。systemd 配下での孤児化を防ぎ、プラットフォーム間でシャットダウン挙動を揃えられます。

環境変数での上書き:

  • PI_BASH_YIELD_MS:デフォルト yield(ms)
  • PI_BASH_MAX_OUTPUT_CHARS:メモリ上の出力上限(文字数)
  • OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS:各ストリームの保留 stdout/stderr 上限(文字数)
  • PI_BASH_JOB_TTL_MS:完了セッションの TTL(ms、1m–3h にクランプ)

Configuration (recommended):

  • tools.exec.backgroundMs(デフォルト 10000)
  • tools.exec.timeoutSec(デフォルト 1800)
  • tools.exec.cleanupMs(デフォルト 1800000)
  • tools.exec.notifyOnExit(デフォルト true):バックグラウンド exec が終了したらシステムイベントをキューし、heartbeat を要求します。
Tutorial.step

Process ツール

アクション:

  • list:実行中 + 完了セッション
  • poll:新しい出力を drain(終了ステータスも報告)
  • log:集約出力を読む(offset + limit 対応)
  • write:stdin を送る(data、任意で eof)
  • kill:バックグラウンドセッションを終了
  • clear:完了セッションをメモリから削除
  • remove:実行中なら kill、完了なら clear

Notes:

  • 一覧/保持されるのはバックグラウンドセッションのみです。
  • プロセス再起動でセッションは失われます(ディスク永続化なし)。
  • process poll/log を実行し、ツール結果を記録したときだけ、セッションログがチャット履歴に保存されます。
  • process はエージェント単位のスコープで、そのエージェントが開始したセッションのみ見えます。
  • process list にはスキャン用に派生 name(コマンド動詞 + 対象)が含まれます。
  • process log は行ベースの offset/limit を使います(offset を省略すると末尾 N 行)。
Tutorial.step

Examples

長いタスクを実行し、後で poll:

Json
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
Json
{ "tool": "process", "action": "poll", "sessionId": "<id>" }

即座にバックグラウンドで開始:

Json
{ "tool": "exec", "command": "npm run build", "background": true }

stdin を送信:

Json
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y
" }