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
" }