- _feed_fallback 미러 OFF, LS cap/grace/hold RAM을 KIS·키움 spill과 정합 - LS 접근토큰 .ls_token_cache_*.json (재시작 재사용, revoke 루프 없음) - 호가 RAM을 틱과 동일 LIVE_FEED_FALLBACK(snap_time)로 컷, 필터 max_age=0은 유지 - 익절 지정가 로그에 실제 호가 벤더(kis/kiwoom/ls 1·2·3차) 표기 Co-authored-by: Cursor <cursoragent@cursor.com>
4.3 KiB
4.3 KiB
LS WS 저널 관측 (Bye / sends≈1 / abort_why / RSP)
8/25형 불완전 REG (OPEN sends≈1 → Bye 반복) 와 관측 패치 필드
(abort_why, ws_same, LS WS RSP) 를 장중 hold 구간에 자동 수집한다.
장외(hold 외)에는 LS 소켓이 없어 OPEN/Bye 가 없는 것이 정상이다.
1. 파일 목록
| 경로 | 역할 |
|---|---|
scripts/observe_ls_ws_journal.py |
journalctl 수집·집계 (once / watch) |
scripts/observe_ls_ws_journal.sh |
cron용 래퍼 (stdout → 일별 래퍼 로그) |
docs/LS_WS_관측_예약.md |
본 문서 |
logs/ls_ws_observe_YYYYMMDD_HHMMSS.log |
매칭된 저널 원문 |
logs/ls_ws_observe_YYYYMMDD_HHMMSS_summary.md |
집계 요약 (sends 분포, abort_why, …) |
logs/ls_ws_observe_cron_YYYYMMDD.log |
cron/래퍼 실행 로그 (그날 누적 append) |
관련 코드(관측 필드 출력):
| 경로 | 내용 |
|---|---|
kis_trader/ws/ls_ws.py |
LS WS OPEN … abort_why= / CLOSE … ws_same= / LS WS RSP … |
kis_trader/utils/ls_ws_session_windows.py |
KR hold 기본 07:00~20:00 |
유닛: kis_trader_main.service
2. 수동 실행
cd /home/hoon/kis_bot
# 당일 00:00~지금 1회 집계
python3 -u scripts/observe_ls_ws_journal.py --once
# hold 시각부터 지정
python3 -u scripts/observe_ls_ws_journal.py --once --since "2026-08-26 07:00:00"
# 90분 폴링(2분 간격) 후 최종 집계 — 아침 재현용
python3 -u scripts/observe_ls_ws_journal.py --watch --minutes 90 --interval 120
# 래퍼 (cron과 동일, 로그 append)
bash scripts/observe_ls_ws_journal.sh watch
bash scripts/observe_ls_ws_journal.sh once --since "2026-08-26 07:00:00"
실행 후 stdout 에 raw= / summary= 경로가 찍힌다.
# 최신 요약 보기
ls -lt logs/ls_ws_observe_*_summary.md | head -3
tail -f logs/ls_ws_observe_cron_$(date +%Y%m%d).log
3. cron 예약 (평일 아침)
KR hold 기본 07:00 → 07:05 에 90분 watch 시작 (약 08:35 종료).
설치 (사용자 hoon crontab):
# LS WS Bye/REG 관측 — 평일 07:05 KST, 90분 watch
5 7 * * 1-5 /home/hoon/kis_bot/scripts/observe_ls_ws_journal.sh watch
장 마감 후 하루 요약(선택):
# LS WS 당일 전체 once 요약 — 평일 20:10 (hold 종료 직후)
10 20 * * 1-5 /home/hoon/kis_bot/scripts/observe_ls_ws_journal.sh once --since "$(date +\%Y-\%m-\%d) 07:00:00"
확인:
crontab -l | grep observe_ls_ws
제거:
crontab -l | grep -v observe_ls_ws_journal | crontab -
4. 요약 파일이 보는 것
| 집계 | 의미 |
|---|---|
LS WS OPEN + sends≈N 분포 |
N=1 다수 → 불완전 REG 의 |
abort_why |
opened_cleared / not_running (REG 루프 중단 사유) |
ws_same |
CLOSE/ERROR 가 현재 소켓인지 |
LS WS RSP / rsp_cd |
REG ACK (body 없는 응답 포함) |
| Bye / opcode=8 | 서버/연결 종료 시그니처 |
| hold 관련 | 장외 대기 중이면 OPEN=0 이 정상 |
힌트 문구는 가설이다. abort_why·ws_same 없이 “고쳤다”고 단정하지 말 것.
5. 8/25 참고 시그니처 (이미 확인된 것)
- 장중
sends≈1OPEN 다수 (예: 373) + Bye/CLOSE 반복 (~1400대) - 정상급
sends≈15이상은 소수 - 당시 프로세스에는
abort_why/ws_same/LS WS RSP없음 (관측 패치 전) - 재시작 후 hold 진입분부터 새 필드가 찍힘
6. 운영 체크리스트
- 전날/당일
kis_trader_main재시작으로 관측 패치·틱 구독전체 적재 코드 반영 확인 - 평일 07:05 cron →
logs/ls_ws_observe_cron_YYYYMMDD.logappend 확인 *_summary.md에서sends≈1비율·abort_why·ws_same확인- 원인 확정 후에만 행동 패치(REG 재시도 / stale close 무시 등) — 선보고·승인
LS_WS_TICK_SAVE=true여도 Bye로 구독이 죽으면ls_ws_ticks는 0
7. 의존
journalctl읽기 권한 (동일 사용자 유닛 또는 systemd user)- Python 3, 레포 루트
/home/hoon/kis_bot - DB/증권사 API 호출 없음 (저널만)
8. 변경 이력
| 일자 | 내용 |
|---|---|
| 2026-08-26 | 스크립트·cron 문서 최초. 재시작 후 장외 hold 대기로 당일 새벽 재현 불가 → 07:05 watch 예약 |