Files
AH-Oil-Trader/restart_server.bat
T
Axel HocksandClaude Opus 5 b14d81f412 restart_server.bat prueft jetzt auch - und zwei cmd-Fallen dabei behoben
Korrektur meiner eigenen Einordnung von vorhin: ich hatte restart_server.bat
als "Wiederanlauf-Pfad" ausgenommen. Falsch. Die Aufgabenplanung startet
start_server_hidden.vbs -> start_server.bat; restart_server.bat wird von NICHTS
automatisch aufgerufen (geprueft) und ist damit ein absichtliches Deployment.
Es prueft jetzt vor dem Kill, Notausgang --ohne-pruefung.

Nur start_server.bat bleibt ungeprueft - das ist der echte Wiederanlauf-Pfad.

Zwei cmd-Fallen, beide NUR durch den Positiv-Test gefunden:

1) `if errorlevel 1` innerhalb eines geklammerten if/else-Blocks wird zur
   PARSE-Zeit ausgewertet, nicht zur Laufzeit. Der erste Entwurf brach deshalb
   auch bei SAUBEREM Code ab - der Neustart haette nie mehr funktioniert.
   Behoben mit Sprungmarken statt Klammer-Bloecken.

2) `echo ... ^(x^)` maskiert im Block anders -> "Der Befehl [0] ist falsch
   geschrieben". Text jetzt ohne runde Klammern.

Der Negativ-Test allein sah in beiden Faellen voellig in Ordnung aus: kaputter
Code -> Abbruch, Server unangetastet, Exit 1. Erst der Positiv-Test hat es
entlarvt. Eine Sperre muss man in beide Richtungen pruefen.

Alle drei Zweige verifiziert (sauber -> weiter/rc 0, kaputt -> Abbruch/rc 1,
--ohne-pruefung -> weiter/rc 0), gegen eine Attrappe, deren Kill/Start durch ein
echo ersetzt ist - so liess sich der Durchlauf-Zweig pruefen, ohne den
laufenden Server anzufassen.

Auch der Testaufbau hatte einen Fehler: die Attrappe lag zuerst in %TEMP%, dort
macht `cd /d "%~dp0"` das Temp-Verzeichnis zum Arbeitsordner und
%~dp0tools\pre_commit.py existiert nicht -> scheinbarer Fehlschlag.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 12:07:41 +02:00

88 lines
4.6 KiB
Batchfile

@echo off
REM ============================================================
REM Oil Trading Agent - BEIDE Server neu starten
REM 1) Hyperliquid-Dashboard (Port 8001, versteckt im Hintergrund)
REM 2) Oil Trading Backend (Port 8000, in diesem Fenster)
REM
REM ⚠ Warum beide: der MT5-Bot holt die echten Liquiditaets-Waende vom
REM HL-Dashboard (127.0.0.1:8001/api/walls). Ausserdem killte die alte
REM Fassung den HL-Server ungewollt mit (Muster '*server.py*' trifft beide)
REM -> das riss die Luecken in die Order-Flow-/Lead-Lag-Datensammlung.
REM Nutzt absolute Pfade (PATH-unabhaengig).
REM ============================================================
title Oil Trading Server - Restart
cd /d "%~dp0"
set "PS=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe"
set "PY=C:\Users\ah\AppData\Local\Programs\Python\Python312\python.exe"
set "HLDIR=%~dp0..\HyperLiquid-WTI Trader"
REM ------------------------------------------------------------
REM CODE-PRUEFUNG VOR DEM KILL (2026-08-07).
REM ⚠ Dieser Batch wird von NICHTS automatisch aufgerufen (geprueft:
REM die Aufgabenplanung startet start_server_hidden.vbs -> start_server.bat).
REM Er ist also ein ABSICHTLICHES Deployment - und dort gehoert die
REM Pruefung hin. Sie laeuft VOR dem Beenden, damit ein laufender,
REM funktionierender Server nicht fuer kaputten Code abgeschossen wird.
REM
REM ⚠⚠ NICHT verwechseln mit start_server.bat: DAS ist der
REM WIEDERANLAUF-Pfad (Reboot/Logon) und prueft bewusst NICHTS. Wuerde
REM ein fehlschlagender Test dort den Start verhindern, staende eine
REM offene Position ohne Trailing, Time-Stop und Notfall-Stop da - nur
REM mit dem Broker-SL. Eine Pruefung, die den Bot offline laesst, ist
REM schlimmer als der Fehler, den sie sucht.
REM Regel: absichtliches Deployment blockieren, Wiederanlauf niemals.
REM
REM Notausgang: restart_server.bat --ohne-pruefung
REM ------------------------------------------------------------
REM ⚠⚠ SPRUNGMARKEN STATT KLAMMER-BLOECKE - das ist hier kein Stilfrage.
REM cmd wertet `errorlevel` INNERHALB eines geklammerten if/else-Blocks zur
REM PARSE-Zeit aus, nicht zur Laufzeit. Der erste Entwurf brach deshalb auch
REM bei SAUBEREM Code ab - der Neustart haette nie mehr funktioniert.
REM Gefunden nur, weil die Positiv-Richtung mit getestet wurde; der
REM Negativ-Test allein sah voellig in Ordnung aus.
REM Ausserdem maskiert cmd runde Klammern im Block anders -> Text ohne "( )".
if /I "%~1"=="--ohne-pruefung" goto :pruefung_aus
echo [0] Code pruefen mit check_nfalle + pytest ...
"%PY%" -X utf8 "%~dp0tools\pre_commit.py"
if errorlevel 1 goto :pruefung_rot
echo [0] Code ist sauber - weiter mit dem Neustart.
goto :pruefung_fertig
:pruefung_rot
echo.
echo [X] ABBRUCH - der laufende Server bleibt unangetastet.
echo Beheben, oder bewusst uebergehen: restart_server.bat --ohne-pruefung
exit /b 1
:pruefung_aus
echo [0] Code-Pruefung UEBERSPRUNGEN wegen --ohne-pruefung
:pruefung_fertig
echo.
echo Beende laufende Server (8000 + 8001) ...
"%PS%" -NoProfile -Command "Get-CimInstance Win32_Process | Where-Object { $_.Name -eq 'python.exe' -and $_.CommandLine -like '*server.py*' } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force; Write-Host (' gestoppt: PID ' + $_.ProcessId) }; Start-Sleep -Seconds 2"
REM ── 1) Hyperliquid-Dashboard zuerst (versteckt), damit die Waende schon
REM bereitstehen, wenn der Bot den ersten Level-Export schreibt.
if exist "%HLDIR%\server.py" (
echo Starte Hyperliquid-Dashboard ^(8001, Hintergrund^) ...
if exist "%HLDIR%\start_hidden.vbs" (
wscript.exe "%HLDIR%\start_hidden.vbs"
) else (
"%PS%" -NoProfile -Command "Start-Process -FilePath '%PY%' -ArgumentList '-X','utf8','server.py' -WorkingDirectory '%HLDIR%' -WindowStyle Hidden -RedirectStandardOutput '%HLDIR%\server_out.log' -RedirectStandardError '%HLDIR%\server_err.log'"
)
REM kurz warten, bis 8001 lauscht (max ~10 s) - fail-safe, blockiert nie lange
"%PS%" -NoProfile -Command "$n=0; while($n -lt 20 -and -not (Get-NetTCPConnection -LocalPort 8001 -State Listen -ErrorAction SilentlyContinue)) { Start-Sleep -Milliseconds 500; $n++ }; if (Get-NetTCPConnection -LocalPort 8001 -State Listen -ErrorAction SilentlyContinue) { Write-Host ' HL-Dashboard laeuft (8001)' } else { Write-Host ' WARNUNG: 8001 antwortet nicht - Chart bleibt ohne Liquiditaetslinien' }"
) else (
echo HL-Projekt nicht gefunden - ueberspringe ^(Liquiditaetslinien aus^).
)
REM ── 2) Oil Trading Backend im Vordergrund (Konsole bleibt sichtbar)
echo Starte Oil Trading Server ^(8000^) ...
set PYTHONIOENCODING=utf-8
"%PY%" -X utf8 server.py
echo.
echo ===== Server beendet =====
pause