Starten Sie die Anwendung beim Schließen automatisch neu

10

Ich habe eine Serveranwendung, die ich ausführen möchte, wenn der Computer ausgeführt wird, und normalerweise ist dies der Fall, außer manchmal finde ich, dass sie von selbst geschlossen wurde.

Gibt es eine Fledermaus oder ein Skript, das ich ausführen kann, um die Anwendung zu überwachen und neu zu starten, falls sie geschlossen wird?

Sid
quelle
Welche Art von Anwendung und wie startet sie normalerweise? Als Dienst, in der Registrierung als Ausführungsbefehl oder im Startordner?
KCotreau
Befehl zum Ausführen der Registrierung. mit der Option '-start'.
Sid
Was passiert derzeit, wenn Sie diesen Befehl erneut ausführen, während die App bereits ausgeführt wird?
KCotreau
nichts. Der Befehl erkennt, dass die Anwendung bereits ausgeführt wird.
Sid

Antworten:

12

Dies funktioniert nicht immer (es hängt davon ab, wie das Programm sich selbst lädt), aber normalerweise können Sie eine Batchdatei wie folgt erstellen:

@Echo off
:Start
NotePad
echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 
echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

goto Start

Ich habe Notepad als Beispiel verwendet.

Die Linien

echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

Dies ist nur eine Verzögerung (von 10 Sekunden), um dem Benutzer die Möglichkeit zu geben, den Vorgang abzubrechen, bevor er erneut gestartet wird.

Die Linie

echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 

wird nicht benötigt, protokolliert jedoch jedes Mal, wenn das Programm in einer Datei geschlossen wurde. Daher kann es hilfreich sein, das Problem zu diagnostizieren. Der ErrorLevel sagt möglicherweise nicht viel aus, aber ein Programm soll 0 zurückgeben, wenn es normal geschlossen wird, und ein Non -zero Nachricht, wenn dies nicht der Fall ist

Hinweis: Sie erwähnen, dass Ihr Programm nichts tut, wenn es bereits ausgeführt wird. Das bedeutet normalerweise, dass die Anwendung gestartet wird, erkennt, dass bereits eine andere Kopie ausgeführt wird, und sofort heruntergefahren wird. Wenn dies der Fall ist und Ihr Programm vor dem Start dieser Batchdatei ausgeführt wird, wird der Batch alle zehn Sekunden wiederholt und versucht, Ihr Programm zu starten.

sgmoore
quelle
"Dann wird der Stapel wiederholt und versucht, Ihr Programm alle zehn Sekunden zu starten." Ist das eine schlechte Sache?
Posfan12
Vielen Dank!! Ein kleines Kopieren und Einfügen um 00:52 Uhr, und ich kann schlafen gehen, ohne mir (zu viel) Sorgen darüber zu machen, was ich am Morgen finden (oder nicht finden) werde. Äh. am Morgen nach dem Schlafengehen.
Spike0xff
2

Basierend auf Ihren obigen Antworten schlage ich vor, dass Sie diesen Befehl in eine Batch-Datei einfügen und diese Batch-Datei dann so einstellen, dass sie jede Minute als geplante Aufgabe ausgeführt wird. Damit ist praktisch kein Overhead verbunden, und es wird sichergestellt, dass Ihr Prozess angegeben wird, unabhängig davon, ob Sie in der Nähe sind, um überhaupt zu erkennen, dass er gestoppt wurde.

KCotreau
quelle
Dies scheint mir eine ziemlich ungeschickte und ineffiziente Lösung zu sein, wenn auch schnell. Gibt es vielleicht ein geeigneteres Mittel zum gleichen Zweck? Danke für Ihre Hilfe!!!
Sid
Sid, wie gesagt, der Overhead ist SEHR minimal und es ist EINFACH zu tun. Wenn Sie einen Weg finden möchten, etwas zu codieren, um zu überprüfen, ob es ausgeführt wird, und es dann neu zu starten, fühlen Sie sich frei, aber ich mache das schon lange mit positiven Ergebnissen. Dies ist eine gängige Methode, wenn Anwendungen, normalerweise auf einem Server, nicht mehr ausgeführt werden.
KCotreau
Mit Abstand die einfachste Methode. Und es gibt keinen Overhead.
Surfasb
2

Ich denke, die richtige Antwort auf diese Frage hängt davon ab, warum Sie es tun möchten. Versuchen Sie, ein versehentliches Herunterfahren zu beheben? Verhindern Sie ein gelegentliches "böswilliges" Herunterfahren durch Benutzer der Maschine (z. B. Mitarbeiter, die Überwachungssoftware schließen)? Schwere und geschickte böswillige Angriffe verhindern? Versuchen Sie selbst Malware zu schreiben (in diesem Fall bitte abhauen ;-))?

Wie andere Kommentatoren bereits erwähnt haben, würde es auch anders aussehen, wenn Sie einen Windows-Dienst geschrieben hätten (zum Beispiel).

Persönlich würde ich wahrscheinlich damit beginnen, eine zweite Bewerbung zu schreiben und sie auf die gleiche Weise zu starten. Lassen Sie beide Anwendungen regelmäßig nacheinander suchen und bei Bedarf neu starten. Stellen Sie jedoch sicher, dass die Anwendung auf einfache Weise ordnungsgemäß geschlossen werden kann.

Das heißt, und angesichts Ihres Kommentars "Manchmal finde ich, dass es von selbst geschlossen ist" würde ich WIRKLICH damit beginnen, herauszufinden, warum es geschlossen ist ...

Steve Mallam
quelle
Ich benutze den Computer als Medienserver und die fehlerhafte Anwendung ist mediaserver.exe. Nichts Böses daran. Ich kann mir kein Szenario vorstellen, in dem die Anwendung geschlossen werden soll, aber wenn ich es tun würde, gäbe es keinen Grund, warum ich das Skript nicht stoppen oder zuerst schlagen könnte. Ich bin auch nicht in der Lage, Software zu schreiben, bin aber mit Fledermausdateien vertraut. dh ich bin ein Noob.
Sid
Entschuldigung - ich würde denken, ich wäre in der Gruppe "Programmierer" und Sie hätten die App selbst geschrieben :-) Unbeholfen, wie es sich anhört, würde ich den von @KCotreau
Steve Mallam,
2

Sie können ein Programm namens ReStartMe 2.0 [ Mirror ] verwenden, das genau das tut:

Überwacht Prozesse und startet sie neu, wenn sie geschlossen werden.

Saxtus
quelle
-1

das ist viel besser! Dies ist ein Code, den ich für einen Minetest-Spieleserver verwendet habe, der in einer .bat-Datei gespeichert werden sollte

@echo off
rem This is a comment line
rem This one is a comment too
rem Following line ensures the working directory is searched in C:
C:
rem Join the correct directory, where the server stuff lies in:
cd "C:\Users\morenavaj\Documents\minetest-0.4.16-win64 - Lone_Wolf\"
:love_spaghetti_code
bin\server.lnk --config minetest.conf ^
            --worldname "Land of Blockheads" ^
            --gameid minetest_game ^
            --port 30000 ^
            --logfile bin/debug.txt

echo Restarting server....
goto love_spaghetti_code

echo Done (this should never, ever, happen)
Rottweiler Spiele
quelle