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

Ausgedruckt am: 19.03.2024 um 05:03 Uhr

Mitglied: 114757
114757 16.05.2015 aktualisiert um 18:37:37 Uhr
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
Mitglied: Server-Nutzer
Server-Nutzer 17.05.2015 um 16:01:28 Uhr
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
Mitglied: Server-Nutzer
Server-Nutzer 20.05.2015 aktualisiert um 12:54:10 Uhr
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
Mitglied: Server-Nutzer
Server-Nutzer 23.05.2015 um 11:08:23 Uhr
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.