Cron 定時
源码版本v2026.7.20
職務
agent に「時刻が来たら自動で走る」能力を持たせる:定時レポート、バックアップ、ブリーフィングなど、人が介在せずに動くジョブ。cron/ サブシステムはスケジューラ、ジョブストレージ、実行記録、ライフサイクルガード、ブループリント/提案カタログ、独立した toolsets 隔離を提供する(定時ジョブは一部ツールを無効化でき、無人時の危険操作を防ぐ)。ゲートウェイが 60s 心拍でスケジューラを駆動する。
主要ファイル
def run_job:2659— 単一ジョブ実行のコア_run_job_script / _run_job_script_with_claim_heartbeat:2113-2247— スクリプト型ジョブ実行 + リース心拍実行状態と中断:352-445—get_running_job_ids/mark_running_jobs_interrupted/_consume_interrupted_flagtoolsets 解析:143-210—_resolve_cron_disabled_toolsets/_resolve_cron_enabled_toolsets(定時ジョブのツール隔離)スレッドプール:501-547—_get_parallel_pool/_get_sequential_pool_CronStorePaths / _current_cron_store:106-157— ジョブストレージパスロックと出力ディレクトリ:251-360—_jobs_lock_file/_job_output_dir_normalize_job_record:426-461— ジョブ記録の正規化実行状態機械:99-156—create_execution/mark_execution_running/finish_executionrecover_interrupted_executions:156-213— クラッシュ回復 +list_executions/latest_executioncheck_gateway_lifecycle:69-112— 定時スクリプトがゲートウェイライフサイクルを誤操作するのを防止blueprint_catalog— ジョブブループリントカタログsuggestion_catalog/suggestions— cron 提案生成_start_cron_ticker:22335— ゲートウェイ内 60s 心拍でスケジュール駆動
データフロー
- ゲートウェイが
_start_cron_ticker:22335を起動し、60s ごとにスケジューラをトリガーする。 - スケジューラはジョブストレージ(
cron/jobs.py:106) を読み、cron 式で到期ジョブを選ぶ。 - 各到期ジョブ:
check_gateway_lifecycle:112でスクリプトを走査し、ゲートウェイライフサイクルの誤変更を阻止- 当該ジョブの toolsets を解析(
cron/scheduler.py:210)、通常は危険ツールを無効化(サブエージェントの auto-deny と同源の発想) create_execution(cron/executions.py:99) で実行を1件記録run_job(cron/scheduler.py:2659) で実際に走る:スクリプト型は_run_job_script:2113、セッション型はrun_conversation:588に渡す
- 実行中のクラッシュ → 次回
recover_interrupted_executions(cron/executions.py:156) が回復マークを付ける。 - 結果はゲートウェイ経由で配信(または指定プラットフォームにミラー)。
まとめ
Cron サブシステムの重点は「無人運転の安全性」:toolsets 隔離、lifecycle_guard による誤操作防止、execution 状態機械によるクラッシュ回復。スケジュール自体はゲートウェイ心拍で駆動し、外部 cron デーモンを必要としない。