ZeroClaw — Daemon 스케줄링 구조
Daemon이 관리하는 컴포넌트 전체와 각각이 어떻게 작업을 트리거하는지. 소스:
src/daemon/mod.rs
전체 구조
컴포넌트별 트리거 방식 비교
| 컴포넌트 | 트리거 | 실행 조건 | Agent 위임 | |----------|--------|----------|-----------| | Gateway | HTTP 요청 | 요청 수신 시 | 항상 | | Channels | 플랫폼 메시지 | 메시지 수신 시 | 항상 | | Heartbeat | interval_minutes 타이머 | two_phase=true면 LLM이 태스크 선택 | 선택적 | | Scheduler | next_run <= now | enabled=true + SecurityPolicy 통과 | JobType::Agent만 |
spawn_component_supervisor — 지수 백오프 재시작
컴포넌트가
Ok(())로 정상 종료해도 재시작. 데몬 컴포넌트는 무한 루프여야 하기 때문.
Heartbeat vs Scheduler 차이
두 컴포넌트 모두 시간 기반이지만 성격이 다르다.
| | Heartbeat | Scheduler (Cron) | |---|---|---| | 간격 단위 | 분 (N분마다) | 초 폴링 → cron 표현식 | | 작업 정의 | config.toml의 태스크 목록 | SQLite의 CronJob 레코드 | | LLM 판단 | two_phase=true면 LLM이 뭘 실행할지 결정 | 없음. 예약된 대로 실행 | | 적응 로직 | 실패 누적 시 interval 늘림 (adaptive) | 재시도 + backoff (execute_job_with_retry) | | Deadman switch | 있음 (N분 무응답 시 알림) | 없음 | | 목적 | 자율적 주기 작업 ("스스로 할 일") | 명시적 예약 작업 ("정해진 시각에 할 일") |
관련
- daemon — Daemon 전체 구조 상세
- cron-scheduler — Scheduler(Cron) 내부 구조
- cron-agent-sequence — Cron → Agent 실행 시퀀스
- gateway — Gateway 컴포넌트
- channel-system — Channels 컴포넌트
- overview — ZeroClaw 학습 지도