Automatischer Neustart bei Crash [CMD Script]

Antworten
Benutzeravatar
JackThursby
Core Developer
Beiträge: 75
Registriert: Mi 24. Jul 2013, 15:26
Hat sich bedankt: 12 Mal
Danksagung erhalten: 4 Mal

Automatischer Neustart bei Crash [CMD Script]

Beitrag von JackThursby »

Bild

Code: Alles auswählen

@echo off

:a
qprocess | grep mfbot.exe | wc -l > %tmp%/mfbot.pid
set /p procnum= < %tmp%\mfbot.pid 
del %tmp%\mfbot.pid
if %procnum% LSS 2 GOTO b
echo :: %DATE% - %TIME%: Prozessanzahl OK 
sleep 5
goto a

:b
echo :: %DATE% - %TIME%: mfbot.exe wird neu gestartet.
taskkill /F /IM mfbot.exe 2>NUL 1>NUL
taskkill /F /IM mfbot.exe 2>NUL 1>NUL
IF EXIST "C:\Programme\Magical Fidget Bot\mfbot.exe" START "C:\Programme\Magical Fidget Bot" "C:\Programme\Magical Fidget Bot\mfbot.exe"
IF EXIST "C:\Program Files\Magical Fidget Bot\mfbot.exe" START "C:\Program Files\Magical Fidget Bot" "C:\Program Files\Magical Fidget Bot\mfbot.exe"
IF EXIST "C:\Program Files (x86)\Magical Fidget Bot\mfbot.exe" START "C:\Program Files (x86)\Magical Fidget Bot" "C:\Program Files (x86)\Magical Fidget Bot\mfbot.exe"
echo :: %DATE% - %TIME%: MFBot wurde neu gestartet! >> mfbot_wrapper.log
sleep 5
goto a
Das ganze als mfbot_wrapper.cmd speichern und starten.
Das Script prüft alle 5 Sekunden ob der Prozess mfbot.exe weniger als 2 mal läuft, falls ja handelt es sich nur um den Prozess der die Fehlerzeile ausgibt.
Dieser wird dann abgeschossen und der mfbot wird wieder korrekt gestartet.
Jeder "zwangsneustart" wird dabei in die Datei mfbot_wrapper.log mit Datum + Uhrzeit geloggt.
Nicht besonders schön aber tut was es soll ;)


Unter Umständen braucht ihr noch folgende Files in eurem Pfad:
(einfach nach C:\Windows oder C:\Windows\system32 kopieren, die Ordner sind auf jedem System im Path)
es handelt sich um 2 Tools aus den binutils, die man von Linux kennt, geportet auf Windows. grep und wc:
Download
Zuletzt geändert von JackThursby am Sa 14. Sep 2013, 00:45, insgesamt 1-mal geändert.
Bild
Elfeline
Beiträge: 10
Registriert: Mi 28. Aug 2013, 22:40
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Automatischer Neustart bei Crash [CMD Script]

Beitrag von Elfeline »

Super, danke für den Beitrag. Ich hab das ein bisschen modifiziert, weil das bei mir als geplanter Task läuft. Leider startet der Bot immer wieder, so hab ich dann irgendwann den Prozess 20 mal oder öfter am laufen. woran kann das liegen? So sieht das bei mir aus:

@echo off

:a
qprocess | grep mfbot.exe | wc -l > %tmp%/mfbot.pid
set /p procnum= < %tmp%\mfbot.pid
del %tmp%\mfbot.pid
if %procnum% LSS 2 GOTO b
sleep 10
goto a

:b
taskkill /IM mfbot.exe 2>NUL 1>NUL
taskkill /IM mfbot.exe 2>NUL 1>NUL
start /min /D "c:\MFB\Magical Fidget Bot1" mfbot.exe
sleep 10
goto a
Elfeline
Beiträge: 10
Registriert: Mi 28. Aug 2013, 22:40
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Automatischer Neustart bei Crash [CMD Script]

Beitrag von Elfeline »

keiner eine Idee, woran das liegen kann?
Benutzeravatar
JackThursby
Core Developer
Beiträge: 75
Registriert: Mi 24. Jul 2013, 15:26
Hat sich bedankt: 12 Mal
Danksagung erhalten: 4 Mal

Re: Automatischer Neustart bei Crash [CMD Script]

Beitrag von JackThursby »

Füge bei taskkill mal den Parameter /F ein, (force)

also:
taskkill /F /IM mfbot.exe 2>NUL 1>NUL

Manchmal hängt einer der beiden Prozesse und reagiert nicht auf den Befehl, in dem Fall wird er halt abgeschossen^^
Bild
Elfeline
Beiträge: 10
Registriert: Mi 28. Aug 2013, 22:40
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Automatischer Neustart bei Crash [CMD Script]

Beitrag von Elfeline »

Danke für die Antwort, das hat zumindest geholfen, dass der Bot nicht x mal gestartet wird.
Anscheinend stimmt jedoch in der ersten Abfrage noch irgendwas nicht, da immer wieder :b greift, obwohl ja beide Prozesse am Laufen sind. Das heisst, alle 10 Sekunden werden jetzt beide Prozesse abgeschossen und neu gestartet. Ich hab auch schon versucht, die ersten 3 Befehlszeilen über die Eingabeaufforderung auszuführen, da wird kein Fehler ausgegeben...
Momentan hab ich mir damit beholfen, den Bot per Aufgabenplanung pauschal alle halbe Stunde abzuschießen und neu zu starten. Ist halt noch unschöner als das Script.... Noch irgendwelche Ideen, warum die laufenden Prozesse nicht erkannt werden?

Edit: Die Abfragen funktionieren wohl, aber wo ist der Hund begraben???? :?:

Code: Alles auswählen

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten.

C:\Users\Administrator>qprocess | grep mfbot.exe | wc -l > %tmp%/mfbot.pid

C:\Users\Administrator>set /p procnum= < %tmp%\mfbot.pid

C:\Users\Administrator>del %tmp%\mfbot.pid

C:\Users\Administrator>echo %procnum%
      2

C:\Users\Administrator>if /i %procnum% LSS 2 echo %procnum%

C:\Users\Administrator>if /i %procnum% LSS 3 echo %procnum%
      2

C:\Users\Administrator>
Zuletzt geändert von Elfeline am Fr 13. Sep 2013, 12:44, insgesamt 1-mal geändert.
NoiR
Beiträge: 7
Registriert: Di 3. Sep 2013, 13:29
Hat sich bedankt: 0
Danksagung erhalten: 0

Re: Automatischer Neustart bei Crash [CMD Script]

Beitrag von NoiR »

Ich arbeite auch schon eine weile daran.
Das liegt ganz klar daran, dass die Befehle nicht die richtigen sind.
Für die verschiedenen Windowsversionen gibt es verschiedene Befehle, die erkannt werden.
Ich habe eine eigene Bat geschrieben. Ich hänge aber noch bei den Zeilen, welche überprüfen, ob 2 Prozesse laufen oder eine...
Wäre es nur ein Prozess wäre es einfach...

Code: Alles auswählen

@echo off

:abc
tasklist |find /I "mfbot.exe">nul
if ERRORLEVEL 1 GOTO xyz


:xyz
taskkill  /IM mfbot.exe /F
IF EXIST "C:\Program Files (x86)\Magical Fidget Bot\mfbot.exe" START "C:\Program Files (x86)\Magical Fidget Bot" "C:\Program Files (x86)\Magical Fidget Bot\mfbot.exe"
goto abc
Hat einer von euch ne Ahnung welche Befehle zum abrufen nötig sind? Oder wie ich eine variable erstellen kann, die aus den 2 Prozessen besteht? Dann einfach hier schreiben...
Ich such auch selbst noch weiter ^^

Greez
NoiR
Elfeline
Beiträge: 10
Registriert: Mi 28. Aug 2013, 22:40
Hat sich bedankt: 1 Mal
Danksagung erhalten: 2 Mal

Re: Automatischer Neustart bei Crash [CMD Script]

Beitrag von Elfeline »

so, ich hab den Fehler weiter eingrenzen können. Sobald ich als angemeldeter Benutzer das Script starte, läuft alles einwandfrei. Jedoch per Aufgabenplanung kommt es zu den genannten Problem... wer jetzt sagt "war ja klar", raus mit der Lösung.
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste