Cron-Zeitsteuerung
源码版本v2026.7.20
Verantwortung
Den Agenten «zur richtigen Zeit automatisch laufen» lassen: Berichte, Backups, Briefings ohne menschliche Anwesenheit. Das cron/-Subsystem stellt Scheduler, Job-Speicher, Ausführungsprotokoll, Lifecycle-Guard, Blaupausen-/Vorschlagskatalog sowie eine eigene Toolset-Isolation bereit (geplante Jobs können Werkzeuge teilweise deaktivieren, um unbeaufsichtigte gefährliche Aktionen zu verhindern). Das Gateway treibt den Scheduler mit einem 60s-Herzschlag.
Schlüsseldateien
def run_job:2659— Kern der Ausführung eines einzelnen Jobs_run_job_script / _run_job_script_with_claim_heartbeat:2113-2247— Skript-Job-Ausführung + Lease-HeartbeatLaufzustand und Abbruch:352-445—get_running_job_ids/mark_running_jobs_interrupted/_consume_interrupted_flagToolset-Auflösung:143-210—_resolve_cron_disabled_toolsets/_resolve_cron_enabled_toolsets(Werkzeug-Isolation für geplante Jobs)Thread-Pool:501-547—_get_parallel_pool/_get_sequential_pool_CronStorePaths / _current_cron_store:106-157— Job-SpeicherpfadeSperren und Output-Verzeichnis:251-360—_jobs_lock_file/_job_output_dir_normalize_job_record:426-461— Job-Datensatz-NormalisierungAusführungs-Zustandsautomat:99-156—create_execution/mark_execution_running/finish_executionrecover_interrupted_executions:156-213— Crash-Recovery +list_executions/latest_executioncheck_gateway_lifecycle:69-112— verhindert, dass Cron-Skripte versehentlich den Gateway-Lifecycle verändernblueprint_catalog— Job-Blaupausen-Katalogsuggestion_catalog/suggestions— Cron-Vorschlagserzeugung_start_cron_ticker:22335— 60s-Herzschlag im Gateway treibt den Scheduler
Datenfluss
- Das Gateway startet
_start_cron_ticker:22335, der den Scheduler alle 60s triggert. - Der Scheduler liest den Job-Speicher (
cron/jobs.py:106) und ermittelt nach Cron-Ausdrücken die fälligen Jobs. - Jeder fällige Job:
check_gateway_lifecycle:112scannt das Skript und blockt versehentliche Lifecycle-Änderungen am Gateway- Auflösung der Toolsets des Jobs (
cron/scheduler.py:210), meist werden gefährliche Werkzeuge deaktiviert (siehe denselben Auto-Deny-Gedanken bei Subagenten) create_execution(cron/executions.py:99) verbucht eine Ausführungrun_job(cron/scheduler.py:2659) führt tatsächlich aus: Skript-Jobs über_run_job_script:2113, Sitzungs-Jobs werden anrun_conversation:588gefüttert
- Crash während der Ausführung → beim nächsten Start stellt
recover_interrupted_executions(cron/executions.py:156) die Marker wieder her. - Das Ergebnis wird über das Gateway zugestellt (oder zu einer Plattform gespiegelt).
Zusammenfassung
Im Cron-Subsystem steht «Sicherheit bei Unbeaufsichtigtheit» im Vordergrund: Toolset-Isolation, lifecycle_guard gegen Fehlbedienung, Ausführungs-Zustandsautomat für Crash-Recovery. Das Scheduling selbst wird vom Gateway-Heartbeat getrieben und braucht keinen externen Cron-Daemon.