Suche Tool, dass Programm beendet und neu startet

Cyperfriend

Der ohne Avatar
Registriert
14 Juli 2013
Beiträge
1.123
Gibt es ein Tool, dass ein Programm (oder in meinem Fall eine CMD-Datei) beendet und dann neu startet? Das Problem ist, dass ich ein Programm dauerhaft laufen lasse, es sich aber manchmal aufhängt, bzw. halt nicht weiterarbeitet. Der Zeitintervall sollte auf drei Stunden aufwärts einstellbar sein.
 
Mit "taskkill" kann man einen Task abschießen mit "start" dann entsprechend wieder neu starten. Damit kannst du dir dann selber ein kleines Skript basteln, dass dir dein Programm abschießt und neu startet.

taskkill:
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #3
und wie bringe ich den Faktor Zeit in die Geschichte mit ein? Das Programm soll um 03:00 Uhr, 06:00 Uhr, 09:00 Uhr, [...] beendet werden und um 03:01 Uhr, 06:01 Uhr, 09:01 Uhr, [...] gestartet werden. Besser wäre es natürlich wenn man das Programm sogar nach nur wenigen Sekunden neu starten könnte oder direkt einen Restart Befehl gibt.
 
Mit drei Stunden warten. Dann killn und gleich wieder neu starten. Da brauchst du auch keine Minute warten nachdem kill ausgeführt wurde. Das kannst du dann in eine Schleife stecken oder belibig verfeinern.
 
Wärs nicht cooler, wenn das Programm sich einfach nicht aufhängen würde?
Was isn das fürn Programm? Könntest du möglicherweise Einfluss auf die Funktionsfähigkeit nehmen? Gibts ne Möglichkeit, auf ein anderes Programm umzusteigen, das besser funktioniert?
 
:p Wenns um die cmd geht, dann kann es aber ja durchaus ein Skript sein, das man relativ einfach verbessern könnte :unknown:
Wenn nicht ist ja der Work around okay. Aber ansonsten ists doch einfach unnötig fehleranfällig.
 
Halllllooooo? Taskplaner? Der ist seit Windows 7 ziemlich aufgebohrt und startet auch zuverlässig kritische Prozesse und Anwendungen. Ist halt viel herumgeklicke den ein Mal einzurichten, läuft dann aber zuverlässig bis die Kiste abbrennt.
 
Das stimmt. Trotzdem wär doch ne Lösung des eigentlich Problems, falls machbar, wünschenswert, oder?
 
Alles was gewünscht ist kann der Taskplaner unter Windows 7. Starte den Mal im erweiterten Modus und du wirst sehen was ich meine.
 
Da gab es früher mal so Teile nannten sich schlicht Watchdog. Stecke man in den Parallel-Port. Die warteten auf regelmäßige Impulse der Software die auf den Rechnern lief.
Blieben die aus wurde einfach ein Reset gemacht und das System fuhr wider hoch. Waren vor 20 Jahren bei Mailbox-Betreibern sehr beliebt.

Auf modernen Multitasking-Betriebssystemen sollte so etwas auch als reine Software Lösung möglich sein.
Ein Programm überwacht ein anderes. Bei Absturz wird der Task gekillt und neu gestartet.
 
Ja, watchdogs gibt es sicherlich, man muss nur irgendwie bei der uns unbekannten Software prüfen ob sie noch läuft, was nicht trivial sein muss.

Meine schnelle Lösung nach Wunsch des TS ist ein "pskill programm.exe", das per windows taskplanung zu gewünschten Zeiten ausgeführt wird.
 
  • Thread Starter Thread Starter
  • #13
Bei dem Programm handelt es sich um den cgminer, welchen ich für Litecoins benutze. Ich starte das Tool mit einer CMD-Datei in welcher ich der exe entsprechende Parameter mitgebe.

Beim Taskplaner konnte ich leider nichts finden um einen Task zu stoppen und stundenmäßig kann man da auch nichts einstellen. Die kleinste Einheit sind Tage.

Ich brauche also ein Tool oder Script, dass im Hintergrund läuft, nach drei Stunden die cgminer.exe abschießt und direkt danach meine Start.cmd ausführt
 
Code:
Expand Collapse Copy
taskkill /IM cgminer.exe
start X:\Pfad\zum\cgminer.exe
bzw gleich deine Startbefehle integrieren.

in eine textdatei, beliebiger Name mit Endung .bat,

Da es keine "Stündlich" Einstellung im Taskplaner gibt, könntest du mehrere tägliche Tasks setzen, die 3h verzögert auslösen, denn die Uhrzeit kann man festlegen. Also 24/3 = 8 Stück. Batch kennt leider afaik keine sleep- oder wait-funktion.

Ich bin natürlich auch der Meinung dass man das Problem lieber an der Wurzel fassen sollte.
 
ich hätte nur folgende lösung.

erstelle eine Start.cmd und Stop.cmd im selben verzeichnis wo der miner liegt.

Start.cmd
Code:
Expand Collapse Copy
start Bla.exe
call "Stop.cmd"

Stop.cmd
Code:
Expand Collapse Copy
timeout /T 10800  > nul
taskkill /F /IM "Bla.exe"
timeout /T 30 > nul
call "Start.cmd"

ich hatte jetzt kein programm, welches parameter zum starten benötigt, zum testen.
musst mal schauen wie das in der Start.cmd unterkommt.

im grunde startet Start.cmd den miner und ruft dann die Stop.cmd auf, dort wartet das script 10800 sekunden, was 3 stunden sind, bis es den miner killt um dann 30 sekunden später die Start.cmd wieder zu starten.
habs eben mit everest.exe getestet, natürlich nicht mit 3 stunden warten, aber es hat gestartet und wurde 5 sekunden später gekillt und das bis strg+c.

wenn der miner nach einer stunde abkackt wartet das script natürlich noch 2 stunden bis zum kill.

€: kannst zum testen ja die zeit auf 10 sekunden stellen.
 
Zuletzt bearbeitet:
  • Thread Starter Thread Starter
  • #16
Danke. Scheint zu funktionieren. Habe das Script angepasst und lass es jetzt mal laufen.
 
Alles was gewünscht ist kann der Taskplaner unter Windows 7.
Du missverstehst mich. Mir geht es darum - wenn möglich - den Bug, der für den Absturz der Software sorgt, zu beheben oder auf eine bessere Software zu wechseln. Das wäre - wie gesagt falls möglich - mMn die sauberere Lösung.

Beim Taskplaner konnte ich leider nichts finden um einen Task zu stoppen und stundenmäßig kann man da auch nichts einstellen. Die kleinste Einheit sind Tage.
Der Taskplaner selbst kann auch nix. Du musst ihm sagen, dass er ein Skript zum Stoppen des Prozesses ausführen soll. Und das mit der Zeiteinstellung stimmt nicht. Du kannst konkrete Uhrzeiten angeben, zu denen die jeweiligen Skripte ausgeführt werden sollen. Also gehts sogar minutenweise.

Die Idee von der Cyberkatze fand ich aber ganz gut. Das ist mit VB.Net relativ einfach möglich. Könnte so aussehen:

[src=vbnet]Dim Prozess As New Process
With Prozess
.StartInfo.Filename = 'Pfad zur exe
.StartInfo.Arguments = 'Parameter
.Start()
End With
[/src]

Dann checkste per Timer einfach regelmäßig, ob
[src=vbnet]Prozess.Responding = True[/src]
Laut Beschreibung ist diese ReadOnly-Variable dazu gedacht anzuzeigen, ob die GUI reagiert. Könnte mir aber denken, dass das auch bei Programmen ohne GUI funktioniert und wenn nicht es eine ähnlich einfache Methode gibt, diese zu überprüfen.
 
Klar kann der Taskplaner ab Windows Vista aufgaben in beliebigen Abständen ausführen... da braucht man nicht mit sleep usw. frickeln.
Aufgabenplanung > neue Aufgabe erstellen (nicht einfache Aufgabe). > Trigger > Neu, Täglich (Wid. alle 1 Tage). Wiederholung jede 3 Stunden für die Dauer von 1 Tag.
Dann unter Aktionen zuerst taskkill mit passendem Parameter um den cgminer abzuschicken und dannals 2. Aktion Prozess starten.

pstools sind zwar auch toll - aber so geht es komplett mit Boardmitteln ....
 
Zurück
Oben