[Unit] Description=KIS Quant Backtest Web Dashboard After=network.target [Service] Type=simple User=hoon # 루트 backtest_web.py 를 직접 실행해야 if __name__ == "__main__" 블록의 app.run() 이 동작함. # (kis_trader/backtest/backtest_web.py 는 얇은 런처이므로 import 시점엔 Flask 가 안 뜸) WorkingDirectory=/home/hoon/kis_bot ExecStartPre=/bin/sh -c 'fuser -k 5050/tcp 2>/dev/null; sleep 1; true' ExecStart=/home/hoon/kis_bot/.venv/bin/python /home/hoon/kis_bot/backtest_web.py # kill 사고 재발 방지 — 어떤 시그널로 죽어도 재시작 (수동 systemctl stop 제외) Restart=always RestartSec=5 # 위 루프 방지: 10초 동안 5회 이상 재시작 시도하면 그만둠 (진짜 설정 오류인 경우) StartLimitIntervalSec=60 StartLimitBurst=5 # Optuna 등 웹이 띄운 장시간 잡: 기본 KillMode=control-group 이면 # systemctl restart 시 자식(Optuna)까지 SIGTERM → trial 중단. # process: 메인 backtest_web 만 종료 (웹 재시작 ≠ Optuna 중단) KillMode=process StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target