Cron Self-Healing Protocol
Cron job이 실패해도 침묵하지 않고 자동 복구하거나 최소 상태를 보고하는 표준 프로토콜.
문제
Cron job이 script timeout이나 API failure로 실패하면:
- Agent가 응답 불가 (cron session에는 대화 채널이 없음)
- 실패가 눈에 보이지 않음
- 수동 개입 필요
해결: 3단계 Self-Healing Flow
PHASE 1: Primary Execution
└→ Script 실행 (timeout_seconds 내에서)
PHASE 2: Retry on Failure
├→ 성공 → PHASE 3
└→ 실패 → Fallback command로 1회 재시도
PHASE 3: Delivery (항상 실행)
├→ 성공 → 정상 보고
└→ 실패해도 → Partial status라도 전달 (절대 침묵 금지)
핵심 원칙: 침묵 금지 (No Silent Failure)
어떤 단계에서 실패하더라도 최소 1개의 보고가 Discord/ Delivery target에 도달해야 함:
| 시나리오 | 출력 |
|---|---|
| 1차 성공 | 정상 보고 (top keeps, article list 등) |
| 1차 실패 → retry 성공 | Retried report + ⚠️ 표시 |
| 1차 실패 → retry 실패 | Partial status (file count, last run time 등) |
| 전부 실패 | 실패 보고 + 수동 조치가 필요한 이유 |
현재 적용된 Job
Trend Harvester
Phase 1: python3 ~/.drewgent/scripts/trend_harvester.py
Phase 2: --dry-run (collection만 검증)
Fallback: analyzed/keep/ 파일 직접 count → 점수 없이도 상태 전달
SEO Article Harvester
Phase 1: python3 .../harvester.py
Phase 2: --limit 10 (10개만 테스트)
Fallback: feedparser로 RSS feed 직접 체크 → 도달 가능한 피드 목록
공통 Fallback Template
## [Job Name] — [timestamp]
Status: ⚠️ [phase] failed after retry
Error: [brief description]
Last successful run: [timestamp or "unknown"]
Action needed: [specific manual step]
Files at: [relevant directory path]Job 설정 표준
Cron job 등록 시 반드시 포함해야 할 필드:
{
"name": "...",
"schedule": "0 */6 * * *",
"timeout_seconds": 300,
"prompt": "...",
"retry_on_failure": true,
"fallback_delivery": true
}timeout_seconds: minimum 300 (5분). LLM synthesis가 필요한 job은 600 이상 권장retry_on_failure: true면 1회 재시도fallback_delivery: true면 실패해도 partial status 전달
Script 쪽 요구사항
Cron agent가 rely하는 script는 다음 조건을 만족해야 함:
- Exit code 명확: 성공=0, 실패!=0
- Pre-generated report: 주요 결과는
report.json으로 출력 - Partial output 보장: 실패해도 가능한 한 file을 남김
# Script 설계 예시
def main():
items = collect_all() # 이건 성공해야 함
try:
scores = score_all(items) # 이건 실패해도 괜찮음
except ScoringError:
scores = {} # 실패해도 partial로 진행
write_report_json(items, scores) # report.json은 반드시 생성
deliver_report() # 이건 항상 실행jobs.json 위치
~/.drewgent/cron/jobs.json
직접 편집 가능. Gateway restart 없이 즉시 반영 (scheduler가 file watching).
Related
- KANBAN_INDEX — Task queue와 연동 가능
- growth-2026 — 성장 계획의 자동화 목표
- INTEGRATION_PROTOCOL — Integration Protocol과 병행 적용