自動化を増やすと、失敗の質が変わる。
最初の頃は「動かない」が問題だった。設定ミス、パッケージ不足、権限エラー。原因は明確で、直せば動く。
今は違う。動いているように見えて、実は途中で止まっている。ログを見に行かないと気づかない。気づいた頃には数時間経っている。この「無言停止」が一番厄介だった。
OpenClawのHeartbeat機能を使って、ロングタスクの状態を定期的にチェックする仕組みを入れた。派手な仕組みではないが、発見の遅れが大幅に減った。
何が起きていたか
自分の環境では、Pixel 4a上でいくつかの処理を並行して走らせている。
- Remotionの動画レンダリング(数分〜十数分)
- npmパッケージのインストール(環境によっては数分)
- Puppeteerを使ったスクレイピング(タイムアウトしやすい)
これらが途中でSIGKILLされたり、OOMで落ちたりする。Pixel 4aのRAMは6GBなので、同時実行が重なると起きやすい。
問題は、プロセスが消えてもエラー通知が来ないこと。次にDiscordでメッセージを送って初めて「あれ、反応がおかしい」と気づく。そこからログを掘る。毎回これだと効率が悪い。
Heartbeatで何を変えたか
OpenClawにはHeartbeat機能がある。定期的にエージェントにメッセージを送り、応答させる仕組み。
これを使って、5分ごとにプロセスの状態をチェックするようにした。
監視ルール
ルールは単純にした。
1. プロセスリストを取得する 2. 5分以上動いているプロセスがあるか確認する 3. あれば状況を報告する 4. なければHEARTBEAT_OKと返す
HEARTBEAT.md の内容:
- プロセスリストを確認
- 5分以上動いているプロセスがあれば進捗報告
- 何もなければ HEARTBEAT_OK
cronジョブとして登録
このチェックを5分間隔のcronジョブとして登録している。メインセッションにsystemEventとして送る形式。
{
"schedule": { "kind": "every", "everyMs": 300000 },
"sessionTarget": "main",
"payload": {
"kind": "systemEvent",
"text": "プロセスリストを確認して、5分以上動いているプロセスがあれば進捗報告..."
}
}
実際の検知事例
Remotionレンダリングの途中停止
420フレームのレンダリング中、47フレーム目でプロセスがkillされていた。Heartbeatのチェックで「プロセスが消えている」ことに5分以内に気づけた。以前なら次にDiscordを開くまで気づかなかった。
onboardingプロセスの無限待機
OAuth認証のonboarding中、入力待ちのまま応答がない状態が続いていた。Heartbeatで「同じプロセスが10分以上動いている」と報告が上がり、手動でkillして再実行できた。
npmインストールのOOM
npm installがメモリ不足で落ちていた。プロセス自体は終了していたが、次のステップに進んでいなかった。Heartbeatの「プロセスなし」報告から、失敗に気づいた。
運用して分かった調整ポイント
頻度は5分がちょうどいい
1分だとノイズが多い。10分だと発見が遅い。5分間隔にしたら、コストと検知速度のバランスが取れた。
報告は短く固定文で十分
最初は詳細なログを出そうとしたが、確認する側の負担が増えるだけだった。「問題なし」か「このプロセスがX分動いてる」の2パターンで十分。
監視対象を絞る
全プロセスを見ると関係ないものまで拾ってしまう。「5分以上」というフィルタだけで、実用上は問題なかった。
Heartbeat vs cron、どう使い分けるか
似た仕組みとしてcronジョブがある。使い分けの基準はこうしている。
Heartbeatに向くもの:
- 複数のチェックをまとめて1回で回したい
- メインセッションのコンテキストが必要
- 多少のタイミングずれが許容できる
cronに向くもの:
- 正確な時刻で実行したい(毎時15分ちょうど、など)
- メインセッションと分離したい
- 別モデルやthinkingレベルで実行したい
自分の場合、ロングタスク監視はHeartbeat、X投稿や記事生成はcronで分けている。
まとめ
Heartbeat監視を入れたことで、「止まっていることに気づかない」時間が大幅に減った。
仕組みとしては単純で、5分ごとにプロセスを見て、異常があれば報告するだけ。それだけで運用のストレスが変わる。
長時間のタスクを日常的に動かしているなら、まずはHeartbeatで「異常を早く見つける」仕組みを入れるだけでも効果がある。高度な監視ツールを導入する前に、こういう軽い仕組みから始めるのが現実的だった。
関連記事
- 使わなくなったPixel 4aをAIエージェント専用機にしたら、24時間働く相棒になった
- Claudeのレート制限で止まった日、OpenClawをCodex OAuthフォールバックで復旧した話
- tweepyとGemini APIでトレンド連動のX(Twitter) BOTを作った