mauser
Goto Top

Gameserver automatisch prüfen und mehr

Hallo. Ich bin hier neu und dieses Forum hat mir schon einige male geholfen, nur bei meinem Jetzigen vorhaben komm ich einfach nicht weiter.

Folgendes Problem:

Auf meinem RootServer (Win 2008) hab ich mehrere Gameserver laufen. 2 von denen stürzen mir aber immer wieder in unregelmässigen Abständen ab, was sich auch leider nicht fixen lässt.
Deshalb arbeite ich daran, die Gameserver nach einem Crash automatisch starten zu lassen.
Dazu hab ich mir diese Batch geschrieben (Code grössten teils aus diesem Forum)

@echo off 
set s2="Server2.exe"  
:1
tasklist | findstr /i "%s2%" 1>NUL 2>&1 || %s2% + parameter  
ping /n 11 localhost >nul
echo %date% - %time% -- Gameserver 2 neu gestartet... >>C:\...\Desktop\Servercrashes.log
goto 1

Dies funktioniert auch einwandfrei. Aber nur solange sich der Prozess nicht mehr in der Taskliste befindet. Wenn der Gameserver aber nur einfach nicht mehr reagiert, bleibt der Prozess ja erhalten.
und die Batch macht nix. Deshalb hab ich nach ewig langer Suche ein Powershell-Script gebastelt, welches den Prozess dann beendet, was ich aber nicht testen kann, weil ich das nicht per batch starten kann.

$liste = ps
$date = date
$reeboot = "Server hing und Prozess wurde beendet.  
IF ($liste -match "iw4mp2.exe") {  
  $prozess = Get-Process Server2.exe
  If ($prozess.Responding -match "False") {  
    Stop-Process -name "Server2.exe"  
    "$date | $reboot" >>C:\...\Desktop\Servercrashes.log  
  }
}
else {
end
}

Jetzt muss die Batchdatei ganz oben dieses Powershell-Script ausführen. Nur hab ich gar keine Ahnung, wie das gehen soll! hab das mit call versucht, da hat der das nur geöffnet und nix weiter gemacht.

Jetzt kommt Ihr ins Spiel.
Könnt ihr mir sagen, wie ich die Powershell automatisch mit dieser Batch ausführen lassen kann und danach die Batch dann weiter macht?
oder könnt ihr mir einen noch besseren Vorschlag machen?

Content-Key: 159408

Url: https://administrator.de/contentid/159408

Printed on: April 18, 2024 at 07:04 o'clock

Member: pieh-ejdsch
pieh-ejdsch Jan 25, 2011 at 18:45:54 (UTC)
Goto Top
moin Mauser,
Willkommen im Forum.
wie Du mit PS-scripts im Batch verfährtst steht bei PowerShell for Runaways - Part I

Auszug:
2.Starten eines Scripts mittels einer Verknüpfung oder per Batch-Datei: powershell.exe -command "C:\Scriptname.ps1"

Gruß Phil
Member: Mauser
Mauser Feb 02, 2011 at 15:28:42 (UTC)
Goto Top
Hey hey,

Sorry, dass ich mich so lang nicht blicken lies.
Ich konnte mein Problem lösen.. Ein bekannter hat mir nen kleines PHP-Paket zusammen gebastelt, welches ich ganz bequem per Batch aufrufe. face-smile

Nun taucht aber das nächste auf, ist aber zum Glück kleiner.
Es gibt hier so unglaublich viele Beiträge zum Thema Prozess killen....
Ich brauch jetzt eine Möglichkeit, eine Anwendung zu per Batch zu beenden. Warum?

Antwort:
Die Gameserver sollen alle 24 Stunden neu gestartet werden. Um den RAM zu entlasten und um die Logfiles übersichtlich zu halten.
Das PHP-Paket starte ich bereits über eine Batch, diese muss aber da bleiben, da sonst ja die Serverüberwachung nicht mehr ausgeführt wird.
Laut Taskmanager heisst diese Anwendung "Server Überwachung" (ja, mit Leerzeichen) und der dazugehörige Prozess lautet "Cmd.exe"

Wenn ich aber in Zukunft wieder was basteln möchte, wer weiss schon was die Zukunft bringt, kann ich ja nicht einfach die Cmd.exe als Prozess killen,
wer weiss, welcher dann beendet wird?!
Ich brauch also eine Möglichkeit, die Anwendung zu beenden, also mit dem Namen, wie er im Taskmanager/Anwendungen zu finden ist.

Mögliche Lösung wäre ja, die PID auszulesen und den in der Batch als Variable zu verwenden. Nur weiss ich nicht wie,