server-nutzer
Goto Top

Watchdog für Yacy (Java) auf Windows 7?

Guten Abend in die Runde.

Ich tüftel grad an einem "Watchdog" für ein unter Java laufendes Programm namens Yacy (Suchmaschine yacy.net).
Yacy läuft aus Gründen nicht als Dienst, sondern wird manuell gestartet per Verknüpfung C:\Users\xyz\YaCy\startYACY.bat.

Leider wird öfter mal nach nicht reproduzierter Zeit (5-40 Stunden?) die http-Ausgabe von Yacy unheimlich laaaaaaaangsam.

Wenn das passiert, dann soll
1) Yacy heruntergefahren werden,
2) gewartet werden
3) der Java-Prozess für alle Fälle gecancelt werden
4) neu gestartet werden.

Hier der Ablaufplan:

--Anfang----
läuft C:\Program Files\Java\jre1.8.0_31\bin\javaw.exe ?
wenn nein: Ende

wird Ausgabe auf http://localhost:8090/ innerhalb von 20 sekunden vollständig geladen?
wenn ja: Ende
wenn nein: C:\Users\xyz\YaCy\stopYACY.bat

Warte 180 Sekunden
kille (zur sicherheit) Prozess (der eigentlich jetzt nicht mehr laufen sollte): C:\Program Files\Java\jre1.8.0_31\bin\javaw.exe
Warte 10 Sekunden

Starte C:\Users\xyz\YaCy\startYACY.bat
--Schluss----

Wie kann ich das unter Verwendung der Aufgabenverwaltung und mit einfacher Kommandozeilen-Befehle (nicht powershell wenns geht) lösen? Übrigens ist wget auf dem Rechner drauf, falls das hilfreich ist.

Freue mich auf Hinweise von Euch.

Schönen Abend
Jörg

Content-Key: 272119

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

Printed on: April 19, 2024 at 17:04 o'clock

Mitglied: 114757
114757 May 16, 2015 updated at 16:37:37 (UTC)
Goto Top
Moin Jörg.
(nicht powershell wenns geht)
Wieso nich face-smile ? Hat aus meiner Sicht nur Vorteile, vor allem weil sich so gut wie alles ohne zusätzliche Tools damit umsetzen lässt, und das Script lässt sich auch komplett in der Aufgabenplanung unterbringen :-P

In der jeweiligen Aktion unter "Programm/Script" trägt man dann powershell.exe ein und unter "Argumente hinzufügen (optional)" trägt man dann folgendes ein:
-ExecutionPolicy ByPass -Command "&{$process = 'javaw';if (get-process $process -EA SilentlyContinue){$start = get-date;(new-Object System.Net.WebClient).DownloadData('http://localhost:8090')|out-null;if(((get-date) - $start).TotalSeconds -gt 20){start-process 'C:\Users\xyz\YaCy\stopYACY.bat';Wait-Process $process -Timeout 180 -EA SilentlyContinue;Get-Process $process -EA SilentlyContinue | kill -Force;start-process 'C:\Users\xyz\YaCy\startYACY.bat';}else{return 0}}else{return 0}}"  
Feddich ist die Kiste.

Gruß jodel32
Member: Server-Nutzer
Server-Nutzer May 17, 2015 at 14:01:28 (UTC)
Goto Top
Grüß Dich, jodel32.

Nagut, hab keine Ahnung von PowerShell, deshalb "verdränge" ich das ganz gern face-wink

Schönen Dank für Dein Script, werde ich ausprobieren und gebe gern Rückmeldung, ob es klappt.

LG Jörg
Member: Server-Nutzer
Server-Nutzer May 20, 2015 updated at 10:54:10 (UTC)
Goto Top
Guten Morgen, jodel32.

So, erste Rückmeldung:
Die Abschaltung scheint funktioniert zu haben.
Yacy war nicht mehr per http erreichbar auf dem PC.
Dann hab ich nach dem Prozess javaw.exe geschaut, der war nicht (mehr) am Laufen.

Das Neustarten hat jedoch nicht geklappt, weiß aber noch nicht, warum.

LG
Jörg
Member: Server-Nutzer
Server-Nutzer May 23, 2015 at 09:08:23 (UTC)
Goto Top
Ich war da nochmal dran.

So wie es aussieht, funktioniert der "start-process"-Teil nicht, wohl aber der "Kill"-Teil.

D.h. der StopYacy-Befehl klappt nicht, dann wird nach Zeitablauf der javaw-Prozess gekillt.

Und der zweite "start-process"-Teil (Neustart) geht auch nicht.

Hatte das im Powershell direkt ausprobiert mit ganz kurzem Runterlade-Timeout 2 Sekunden.