fix: filter non-numeric /proc entries in DB reset parser kill

The previous /proc-based process kill attempted to read cmdline from
non-PID entries like /proc/fb, causing NotADirectoryError in Docker.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
21in7
2026-03-05 21:01:53 +09:00
parent bfecf63f1c
commit aef161002d

View File

@@ -118,12 +118,15 @@ def reset_db():
# 파서 프로세스 재시작 (entrypoint.sh의 백그라운드 프로세스) # 파서 프로세스 재시작 (entrypoint.sh의 백그라운드 프로세스)
import subprocess, os, signal import subprocess, os, signal
# 기존 파서 종료 (pkill 대신 Python-native 방식) # 기존 파서 종료 (pkill 대신 Python-native 방식)
for proc_dir in os.listdir("/proc") if os.path.isdir("/proc") else []: for pid_str in os.listdir("/proc") if os.path.isdir("/proc") else []:
if not pid_str.isdigit():
continue
try: try:
cmdline = open(f"/proc/{proc_dir}/cmdline", "r").read() with open(f"/proc/{pid_str}/cmdline", "r") as f:
if "log_parser.py" in cmdline and str(os.getpid()) != proc_dir: cmdline = f.read()
os.kill(int(proc_dir), signal.SIGTERM) if "log_parser.py" in cmdline and str(os.getpid()) != pid_str:
except (ValueError, FileNotFoundError, PermissionError, ProcessLookupError): os.kill(int(pid_str), signal.SIGTERM)
except (FileNotFoundError, PermissionError, ProcessLookupError, OSError):
pass pass
# 새 파서 시작 # 새 파서 시작
subprocess.Popen(["python", "log_parser.py"]) subprocess.Popen(["python", "log_parser.py"])