Batch Ports listen

Tockra

Lt. Commander
Registriert
Dez. 2008
Beiträge
1.063
Hallo Leute,

ich möcht eine Anwendung nur starten, wenn mein 27015 UDP Port nicht belegt ist bzw. kein Server darüber läuft. Am liebsten würde ich die Abfrage durch eine Schleife wiederholen, aber notfalls geht das auch mit dem Aufgabenplaner. Allerdings ist ersteres wichtig.
Wie kann ich das am besten umsetzen?

Gruß
Tim Tannert
 
wäre es nicht einfacher abzufragen, ob die anwendung, die normalerweise bei dir an dem port lauscht, gerade läuft?
 
tasklist | find /I "CoDServer.exe" > NUL
IF %ERRORLEVEL% EQU 1 CoDServer.exe


oder eben den Port prüfen

netstat -a | find "27015" > NUL
IF %ERRORLEVEL% EQU 1 CoDServer.exe
 
Zuletzt bearbeitet:
Per Prozess:
Code:
tasklist | findstr /i anwendung.exe
if errorlevel 1 goto :eof
:: irgendwas machen, da gefunden
:eof
Per Port:
Code:
netstat -a | findstr /i :27015
if errorlevel 1 goto :eof
:: irgendwas machen, da gefunden
:eof
 
Das Problem ist, dass ich das für Counter-Strike: Source Server mache und mehrere Prozesse mit der Exe habe. Die Exe haben zwar verschiedene Locations, heißen aber alle gleich. Somit gibt es 7 x "srcds.exe*32" als Prozess im Taskmanager. Also weiß ich nicht so ganz, ob das funktionieren kann, dass er dann die einzelnen Server individuell auseinander halten kann ...
 
Zuletzt bearbeitet:
dann geh halt über den Port. Die werden ja nicht alle auf denselben Port lauschen.
 
man könnte zusätzlich bei netstat noch das Protokoll angeben... aber wird vermutlich nicht notwendig sein...
 
Kann ich nicht die Port und Prozessvariante verbinden? Denn manchmal kann ich einen Server nicht anpingen obwohl er offen ist (wenn irgend nen Fehler sich in die Serversoftware eingeschlichen hat). In diesem Falle würde das Port lauschende System munter x Server öffnen die sehr viel Systemresourcen fressen.
 
Zuletzt bearbeitet:
Code:
tasklist | findstr /i anwendung.exe
if errorlevel 1 goto :eof

netstat -n | findstr :27015
if errorlevel 1 goto :eof

:: mache irgendwas wenn exe offen und port belegt

:eof
 
Wenn keine sandbox.exe gefunden wurde, startet er sie. Füg mal ein pause am Ende hinzu und sieh was er ausgibt.
 
Es gibt extra eine Syntax für if errorlevel >= i. ;)
 
Was hast du denn momentan drin stehen? Nach dem Einleitungssatz von dir, sollte es so gehen:
Code:
netstat -a | findstr /i :27015
if errorlevel 1 goto :check_application
goto :eof

:check_application
tasklist | findstr anwendung.exe
if errorlevel 1 goto :start_application
goto :eof

:start_application
start anwendung.exe

:eof
ungetestet.
 
Okay Tatsache. Es klappt. Das was ich oben geschrieben habe ging nicht. Aber egal...

Jetzt habe ich ein neues Problem. Für jeden einzelnen Server habe ich eine einzelne .bat Datei angelegt und eine "Master" .bat Datei, die die ganzen einzelnen ausführen soll (ich habe wegen dieser "Variablenamengeschichte" verschiedene .bat Dateien genommen.
Nun ist das so, dass sich eine neue Console öffnet, diese schaut dann eine kurze Zeit nach dem Port und öffnet ggf. die Serverconsole. Das Problem ist, dass sich dann die Konsole in der der Check durchgeführt wurde nicht mehr schließt und ich somit bei jedem "Multistart" aller Server 8 tote Konsolen rumliegen habe. Ich habe schon unter dem :eof ein "exit" eingefügt, aber das brings auch nicht.
 
Von deiner Master Batch aus musst du die einzelnen Batch Dateien mit call aufrufen

Falls ich dich falsch verstanden habe gibts noch die Möglichkeit Batch Dateien mit cmd /C aufzurufen. Das /C sorgt dafür dass sich der Interpreter wieder schließt.

Also

cmd /C MeineBatch.bat
 
Zuletzt bearbeitet:
Zurück
Oben