워치독
워치독은 메인 프로그램과 별도의 독립 프로세스로 실행되어, 프로그램 크래시, 행(Hang), 연속 에러 등의 문제를 감지하고 자동으로 재시작합니다.
필요성
섹션 제목: “필요성”| 문제 상황 | 증상 | 위험도 |
|---|---|---|
| 프로그램 크래시 | 프로세스 종료, GUI 사라짐 | 높음 |
| 프로그램 행(Hang) | 응답 없음, CPU 0% | 높음 |
| 무한 에러 루프 | 주문 실패 반복 | 중간 |
| HTS 연결 끊김 | HTS 프로세스 종료 | 높음 |
| 메모리 누수 | 점진적 메모리 증가 | 낮음 |
아키텍처
섹션 제목: “아키텍처”┌─────────────────────────────────────────────────────┐│ 워치독 (Watchdog) ││ ┌───────────┐ ┌──────────┐ ┌───────────┐ ││ │ 프로세스 │ │ 헬스체크 │ │ 스케줄 │ ││ │ 모니터링 │ │(Heartbeat)│ │ 관리 │ ││ └─────┬─────┘ └─────┬────┘ └─────┬─────┘ ││ └──────────────┼──────────────┘ ││ ▼ ││ ┌──────────────────┐ ││ │ 자동 재시작 엔진 │ ││ └──────────────────┘ │└───────────────────────┬───────────────────────────────┘ ▼┌─────────────────────────────────────────────────────┐│ 메인 프로그램 (HTS Auto Trading) ││ - 주기적으로 heartbeat 파일 업데이트 ││ - 상태 정보 기록 │└─────────────────────────────────────────────────────┘통신 방식
섹션 제목: “통신 방식”메인 프로그램과 워치독은 파일 기반으로 통신합니다.
- 메인 프로그램: 매 10초마다
heartbeat.json업데이트 - 워치독: 매 5초마다
heartbeat.json읽기 및 상태 확인
하트비트 시스템
섹션 제목: “하트비트 시스템”heartbeat.json 구조
섹션 제목: “heartbeat.json 구조”{ "timestamp": "2025-01-18T10:30:15.123456", "pid": 12345, "status": "running", "strategy": "grid_trading", "worksheet": "SOXL_F1", "last_order_time": "2025-01-18T10:29:45.000000", "orders_processed": 5, "orders_failed": 0, "error_count": 0, "memory_mb": 125.5, "uptime_seconds": 3600}상태 값
섹션 제목: “상태 값”| status | 설명 |
|---|---|
starting | 프로그램 시작 중 |
running | 정상 실행 중 |
idle | 대기 중 (시장 마감 등) |
error | 에러 발생 (복구 시도 중) |
stopping | 종료 중 |
워치독 설정 (watchdog_config.json)
섹션 제목: “워치독 설정 (watchdog_config.json)”{ "target": { "executable": "HTS_Auto_Trading.exe", "working_dir": ".", "arguments": [] }, "timing": { "check_interval": 5, "heartbeat_timeout": 60, "startup_grace_period": 30, "graceful_shutdown_timeout": 30, "min_restart_interval": 60 }, "restart_policy": { "max_consecutive_restarts": 5, "restart_counter_reset_time": 600, "on_max_restarts_exceeded": "pause" }, "schedule": { "enabled": true, "operating_hours": [ { "start": "22:00", "end": "06:30" } ], "operating_days": [1, 2, 3, 4, 5] }, "error_thresholds": { "consecutive_error_limit": 10, "memory_limit_mb": 1024 }}설정 항목 상세
섹션 제목: “설정 항목 상세”timing (타이밍)
섹션 제목: “timing (타이밍)”| 항목 | 설명 | 기본값 |
|---|---|---|
check_interval | 모니터링 확인 주기 (초) | 5 |
heartbeat_timeout | 하트비트 타임아웃 (초) | 60 |
startup_grace_period | 시작 후 유예 시간 (초) | 30 |
graceful_shutdown_timeout | 정상 종료 대기 시간 (초) | 30 |
min_restart_interval | 최소 재시작 간격 (초) | 60 |
restart_policy (재시작 정책)
섹션 제목: “restart_policy (재시작 정책)”| 항목 | 설명 | 기본값 |
|---|---|---|
max_consecutive_restarts | 최대 연속 재시작 횟수 | 5 |
restart_counter_reset_time | 안정 운영 후 카운터 리셋 시간 (초) | 600 |
on_max_restarts_exceeded | 초과 시 동작 | "pause" |
운영 시나리오
섹션 제목: “운영 시나리오”정상 운영
섹션 제목: “정상 운영”[22:00] 운영 시간 시작 → 메인 프로그램 시작[22:00~06:00] 5초마다 하트비트 확인 → 정상[06:00] 운영 시간 종료 → 메인 프로그램 정상 종료프로그램 크래시
섹션 제목: “프로그램 크래시”[03:00] 메인 프로그램 크래시 → 프로세스 종료[03:00 +5초] 워치독 감지 → 알림 발송[03:00 +5초] 재시작 → 새 프로세스 시작[03:00 +35초] 안정화 확인 → 하트비트 정상프로그램 행(Hang)
섹션 제목: “프로그램 행(Hang)”[04:00] 프로그램 Hang → 하트비트 업데이트 중단[04:00 +60초] 하트비트 타임아웃 감지 → 알림 발송[04:00 +60초] 강제 종료 후 재시작연속 재시작 초과
섹션 제목: “연속 재시작 초과”[05:00] 5번 연속 재시작 초과→ 워치독 일시정지 (pause)→ "최대 재시작 횟수 초과" 알림→ 수동 개입 필요실행 방법
섹션 제목: “실행 방법”직접 실행
섹션 제목: “직접 실행”python watchdog.py --config watchdog_config.jsonWindows 서비스 등록 (NSSM)
섹션 제목: “Windows 서비스 등록 (NSSM)”nssm install HTSWatchdog "C:\path\to\python.exe" "C:\path\to\watchdog.py"nssm set HTSWatchdog AppDirectory "C:\path\to\hts_rpa"nssm set HTSWatchdog Start SERVICE_AUTO_STARTnssm start HTSWatchdog작업 스케줄러
섹션 제목: “작업 스케줄러”- 작업 스케줄러에서 “기본 작업 만들기” 선택
- 트리거: 컴퓨터 시작 시
- 동작:
watchdog.exe실행 - “컴퓨터가 AC 전원에 연결된 경우에만 작업 시작” 해제
시스템 트레이 (선택)
섹션 제목: “시스템 트레이 (선택)”워치독을 시스템 트레이에서 실행하여 백그라운드 모니터링이 가능합니다.
- 상태 확인
- 수동 재시작
- 일시정지 / 재개
- 로그 파일 열기