콘텐츠로 이동

워치독

워치독은 메인 프로그램과 별도의 독립 프로세스로 실행되어, 프로그램 크래시, 행(Hang), 연속 에러 등의 문제를 감지하고 자동으로 재시작합니다.

문제 상황증상위험도
프로그램 크래시프로세스 종료, GUI 사라짐높음
프로그램 행(Hang)응답 없음, CPU 0%높음
무한 에러 루프주문 실패 반복중간
HTS 연결 끊김HTS 프로세스 종료높음
메모리 누수점진적 메모리 증가낮음
┌─────────────────────────────────────────────────────┐
│ 워치독 (Watchdog) │
│ ┌───────────┐ ┌──────────┐ ┌───────────┐ │
│ │ 프로세스 │ │ 헬스체크 │ │ 스케줄 │ │
│ │ 모니터링 │ │(Heartbeat)│ │ 관리 │ │
│ └─────┬─────┘ └─────┬────┘ └─────┬─────┘ │
│ └──────────────┼──────────────┘ │
│ ▼ │
│ ┌──────────────────┐ │
│ │ 자동 재시작 엔진 │ │
│ └──────────────────┘ │
└───────────────────────┬───────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ 메인 프로그램 (HTS Auto Trading) │
│ - 주기적으로 heartbeat 파일 업데이트 │
│ - 상태 정보 기록 │
└─────────────────────────────────────────────────────┘

메인 프로그램과 워치독은 파일 기반으로 통신합니다.

  • 메인 프로그램: 매 10초마다 heartbeat.json 업데이트
  • 워치독: 매 5초마다 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종료 중
{
"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
}
}
항목설명기본값
check_interval모니터링 확인 주기 (초)5
heartbeat_timeout하트비트 타임아웃 (초)60
startup_grace_period시작 후 유예 시간 (초)30
graceful_shutdown_timeout정상 종료 대기 시간 (초)30
min_restart_interval최소 재시작 간격 (초)60
항목설명기본값
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초] 안정화 확인 → 하트비트 정상
[04:00] 프로그램 Hang → 하트비트 업데이트 중단
[04:00 +60초] 하트비트 타임아웃 감지 → 알림 발송
[04:00 +60초] 강제 종료 후 재시작
[05:00] 5번 연속 재시작 초과
→ 워치독 일시정지 (pause)
→ "최대 재시작 횟수 초과" 알림
→ 수동 개입 필요
Terminal window
python watchdog.py --config watchdog_config.json
Terminal window
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_START
nssm start HTSWatchdog
  1. 작업 스케줄러에서 “기본 작업 만들기” 선택
  2. 트리거: 컴퓨터 시작 시
  3. 동작: watchdog.exe 실행
  4. “컴퓨터가 AC 전원에 연결된 경우에만 작업 시작” 해제

워치독을 시스템 트레이에서 실행하여 백그라운드 모니터링이 가능합니다.

  • 상태 확인
  • 수동 재시작
  • 일시정지 / 재개
  • 로그 파일 열기