← 리포트 목록
market-indicator-tracker 크론 08-16 정지 원인 진단 (macro-timeseries 38개 정체)
2026-09-28
guardian
[ops, cron, macro-timeseries, market-indicators, failure-analysis]
결론 (한 줄)
market-indicator-tracker는 연속실패 자동 비활성화가 아니라, 2026-08-17 13:31:43 KST에 사유 기록 없이 30개 잡이 한꺼번에 멈춘 일괄 정지(08-16/17 역이관 정황)에 휩쓸린 것이다. 그리고 macro-timeseries 38개 정체의 진짜 작성자는 이 잡이 아니라 같은 초에 함께 멈춘 macro-series-collector다.
[점검]
- 장부: /Users/ron/.hermes/cron/jobs.json (mtime 09-28 13:06, 라이브), /Users/ron/.hermes/cron/executions.db (복사본 /tmp/exec_copy.db로 조회), 참고용 /Users/ron/.hermes-next/cron/{jobs.json,executions.db}
- 실행 증빙: /Users/ron/.hermes/cron/output/ocRESTORE-market-indicator-tracker/*.md
- 스크립트: scripts/pipeline/market_indicator_tracker.py (존재, 102,249바이트), scripts/pipeline/macro_series_collector.py (존재, 19,921바이트)
[수치]
jobs.json 필드 (id=ocRESTORE-market-indicator-tracker, 3101행)
| 필드 | 값 |
|---|---|
| enabled / state | false / paused |
| schedule | 5 7,16 * * * (Asia/Seoul) |
| last_run_at | 2026-08-16T07:05:43.508583+09:00 |
| last_status | error |
| last_error | RuntimeError: HTTP 429 usage_limit_reached (prolite, resets_at=1787196898) |
| failure_streak / consecutiveErrors | 필드 없음 |
| paused_at | 2026-08-17T13:31:43.841328+09:00 (3149행) |
| paused_reason | null (3150행) |
| migration | {source: cron-missing-recovery-surface2, date: 2026-04-22} — moved-from-hermes-next 태그 없음 |
| command | PYTHONPATH=.../scripts /usr/bin/python3 .../scripts/pipeline/market_indicator_tracker.py --notify |
executions.db 조회
- SQL:
SELECT id,status,started_at,finished_at,error,delivery_outcome FROM executions WHERE job_id='ocRESTORE-market-indicator-tracker' AND started_at BETWEEN '2026-08-10' AND '2026-08-18'→ 0행 (라이브 ~/.hermes 장부). 원인: 이 장부는 전체 1000행만 남아 있고 최소 started_at=2026-09-27T10:42 — 8월 기록은 이미 밀려나 없다(SELECT min(started_at),max(started_at),count(*) FROM executions→ 2026-09-27T10:42:58 / 2026-09-28T13:08:09 / 1000). - 같은 SQL을 ~/.hermes-next 장부(1000행, 08-15 23:31~08-16 12:45)에 실행 → 1행:
ocRESTORE-market-indicator-tracker|completed|2026-08-16T07:05:07|07:05:36. - 대체 증빙(output 폴더): 08-10~08-14 07:05까지는 [SILENT] 정상 응답, 08-14 16:05 / 08-15 07:05 / 08-15 16:05 / 08-16 07:05 4회는
HTTP 429 usage_limit_reached오류.
이상한 점 — 셸 잡인데 429
이 잡은 LLM을 부르지 않는 셸 명령인데 ~/.hermes 쪽 출력은 "Prompt" 섹션이 있는 에이전트 모드 형식으로 429가 찍혔다. 같은 08-16 07:05에 ~/.hermes-next 쪽은 Mode: no_agent (script) 로 정상 완료(silent)했다. 즉 08-14 16:05부터 두 게이트웨이가 같은 잡을 동시에 돌렸고, 구 경로 쪽은 셸 잡을 에이전트로 잘못 처리하다 모델 한도(프롤라이트)에 걸린 것이다. 스크립트 자체 실패가 아니다.
일괄 정지 규모
- jobs.json 158개 중 paused_at이 2026-08-17T13:31로 시작하는 잡: 30개, 전부 paused_reason=null. last_status: error 26 / ok 4.
- 여기에 macro-series-collector(157행, paused_at 2026-08-17T13:31:43.153, last_status=ok, last_run_at 2026-08-14T06:50)가 포함된다. 연속실패 없이 멈췄다.
- 자동 비활성화(sweeper consecutiveErrors≥3) 흔적 없음: 해당 필드 자체가 없고, 정지 시각이 한 초 안에 30개로 몰려 있어 일괄 조작으로 판정.
macro-timeseries 작성 주체 분리
| 폴더 | 작성자 | 상태 |
|---|---|---|
| memory/macro-timeseries/ (51개) | macro-series-collector (평일 06:50, 전 50개) + fi-morning-brief 07:10 (11개 --series) | 38개 08-14 정지, 11개 매일 갱신 |
| memory/market-indicators/YYYY-MM-DD.json | market-indicator-tracker | 08-17 이후 09-01/02/07만 산발(수동 추정), 09-28 오늘 수동 실행분 |
- 근거: market_indicator_tracker.py 31행 OUTPUT_DIR = WORKSPACE / "memory" / "market-indicators" — macro-timeseries에 안 쓴다. macro_series_collector.py 31행 MACRO_DIR = WORKSPACE / "memory" / "macro-timeseries". |
||
| - 실행 전 mtime 분포: 2026-05-11 1개 / 2026-08-14 38개 / 2026-08-27 1개(CPIAUCSL) / 2026-09-28 11개 = 51개. |
수동 1회 실행 결과 (2026-09-28 KST)
cd /Users/ron/.hermes/workspace && PYTHONPATH=/Users/ron/.hermes/workspace/scripts /usr/bin/python3 scripts/pipeline/market_indicator_tracker.py(--notify 제외, DM 미발송)- 13:09:41~13:10:12, exit 0, 지표 89개, 이상치 24건,
Saved: 2026-09-28.json - macro-timeseries 변경 파일 수: 0 (예상대로 — 이 스크립트는 다른 폴더에 씀)
- 부수 경고: 웹앱 알림 트리거 HTTP 404 (무시 처리됨)
cd /Users/ron/.hermes/workspace && /usr/bin/python3 scripts/pipeline/macro_series_collector.py- 13:10:28~13:11:27, exit 0,
50/50 succeeded, 0 failed (success_rate=100.0%) - macro-timeseries 변경 파일 수: 50 / 51. 실행 후 mtime 분포: 2026-09-28 50개 / 2026-05-11 1개(ADPWNUSNERSA — 수집 목록에 없는 과거 잔재, 목록엔 ADPMNUSNERSA만 있음)
- 최신 관측일 예: DGS10 2026-09-24 5.18, BAMLC0A0CM 2026-09-24 0.79, WALCL 2026-09-23, CPIAUCSL 2026-08-01(월간 정상 주기)
ls -lt memory/macro-timeseries/*.json | head결과 상위: BOGZ1FL663067003Q, CPIMEDSL, CUSR0000SEHC, DEXCHUS, MMMFFAQ027S, WRESBAL, WTREGEN, RRPONTSYD, ADPMNUSNERSA, JTSJOL — 모두 9월 28 13:11.
[판단]
- 즉시 조치(완료): 두 수집기 수동 1회 실행으로 오늘자 데이터 공백 메움. 크론 설정은 건드리지 않음(두 잡 모두 enabled=false 유지).
- 해리 확인 필요: macro-series-collector와 market-indicator-tracker 재가동. 둘 다 스크립트는 정상(exit 0)이라 켜기만 하면 된다. 재가동하지 않으면 38개는 내일부터 다시 멈춘다.
- 참고: 같은 초에 멈춘 나머지 28개 잡(fed-liquidity-aggregator, economic-calendar-daily, kr-index-close-refresh 등)도 같은 원인일 가능성이 높다 — 일괄 재검토 필요.
[다음행동]
- ops_todos #1976 등록: "[재가동 승인 요청] macro-series-collector + ocRESTORE-market-indicator-tracker 크론 (08-17 13:31 일괄 paused)" (todo/high, assigned harry)
- 승인 후 검증: 다음 06:50 / 07:05 실행 뒤
stat -f '%Sm %N' -t '%Y-%m-%d' memory/macro-timeseries/*.json | awk '{print $1}' | sort | uniq -c에서 50개가 당일이어야 함,ls -lt memory/market-indicators/*.json | head -1이 당일이어야 함. - 재가동 시 주의: 두 잡 모두 셸 잡이다. 08-14~16처럼 에이전트 모드로 잘못 처리되지 않는지 첫 실행 output의
Mode: no_agent (script)줄을 확인할 것.