Batches überwachen und ggf. neustarten

komplexor

Mitglied
Hallo,

ich versuche mich gerade daran eine Art Batchmonitor zu schreiben. Dazu starte ich eine Batch mittels dem ProcessBuilder. Die Batch startet dann ein externes Modul und nach kurzer Zeit beendet es dieses dann wieder, das ganze in einer Endlosschleife, also starten, auflegen, starten, auflegen...... Das funktioniert soweit auch ganz gut, aber nun zu dem Problem: Es kommt vor dass das Modul nach dem Beenden einfach hängen bleibt und der Prozess bei "
Code:
Sending message to Modul,ACBX ... done"
einfach hängen bleibt und nicht wieder startet. Genau hier muß dann eingegriffen werden. Mein Monitor soll diesen Fall erkennen, den Prozess beenden und wieder neu starten. Leider habe ich keine Ahnung wie ich das realisieren kann, jmd eine Idee?
Hier mal der aktuelle Code:
Java:
public void run(){
		try {
			ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/c", "MyWindowsDOSBatch.bat");
			System.out.println("MyWindowsDOSBatch.bat gestartet");
			 processBuilder.directory(new File("C:\\"));
			 final Process process = processBuilder.start();
			 ExecutorService executorService = Executors.newSingleThreadExecutor();
			 executorService.execute(new Runnable() {
			   public void run() {
			     Scanner scanner = new Scanner(process.getInputStream());
			     String line;
			     long start;
			     long end;
			     while (scanner.hasNext()) {
			       line = scanner.nextLine();
			       System.out.println(line);
			     }
			     scanner.close();
			   }
			 });
  
			 System.out.println(process.waitFor());
			 executorService.shutdown();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
 

freez

Top Contributor
Ich glaube im "execute" Block kannst du es nicht machen (ungeprüfte Aussage)

ganz spontane Idee dazu:
du startest einen extra Thread, der periodisch prüft, ob dein Prozess noch läuft
a. läuft er länger als X Sekunden, bricht der Thread den Prozess ab
b. Ist der Prozess schneller zu ende, beendet er den Thread,

Nach Beendigung deines Threads kannst du den Prozess neu starten, da Prozess und Thread beendet sind.
 
Zuletzt bearbeitet:

komplexor

Mitglied
hallo,

danke für die antwort, aber so funktioniert das nicht, da der Prozess ja weiterhin ausgeführt wird, aber an einer bestimmten position hängt. Was ich brauche ist zwischen
Java:
while (scanner.hasNext()) {
                   line = scanner.nextLine();
                   System.out.println(line);
}
ein timer der prüft ob nach bestimmter zeit eine neue Zeile geschrieben wurde, wenn nicht, dann beende den prozess. Aber ich weiß nicht wie ich das überprüfen kann.
 

freez

Top Contributor
danke für die antwort, aber so funktioniert das nicht, da der Prozess ja weiterhin ausgeführt wird

Ja, genau deswegen nehme einen weiteren Thread, der nach einem eingestellten timeout deinen Prozess killt. Dazu benötigst du einen Merker, der kennzeichnet, ob dein Prozess noch läuft und über den frägst du ab, ob er gekillt werden soll:
Pseudocode:
Java:
public void run(){
	// 100x100 ms = 10 s Timeoutzeit
	for(int i = 0; i < 100; i++){
		if(!processRunning)
			return;
		Thread.sleep(100);
   }
   if(processRunning)
		process.kill();
}
 

freez

Top Contributor
Ich sehe gerade, dass nicht dein Batch File immer wieder neu gestartet wird, sondern in deinem Batch File wird immer wieder irgendwas ausgeführt.

OK, aber mein Beispiel lässt sich auch auf die 2 Zeilen anwenden, die du genannt hast. vor nextLine Startest du den TimeoutThread und danach beendest du ihn wieder. Sollte dein Process hängen, so bricht der TimeoutThread den Process ab. Von aussen kannst du dann per Schleife den Process neu starten, wenn er durch den TimeoutThread abgewürgt wurde. Wenn der Process regulär beendet wird, so verlässt du die Schleife einfach.
 
Zuletzt bearbeitet:

komplexor

Mitglied
hey freeze,

genau so versuch ich das gerade...leider klappt es noch nicht...
ich bastel noch ein wenig und wenn nichts klappt...werd ich nochmal posten.
danke soweit schon mal.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Java und Internet überwachen? Allgemeine Java-Themen 4
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
D Thread-Array (richtig) überwachen Allgemeine Java-Themen 3
T Update eines Programms - Beenden eines anderen Prozesses überwachen Allgemeine Java-Themen 8
S http POST überwachen Allgemeine Java-Themen 2
P Variablen in einer anderen Klasse auf Änderungen überwachen Allgemeine Java-Themen 12
K Prozess starten, überwachen und beenden Allgemeine Java-Themen 4
G Dateien überwachen und backuppen Allgemeine Java-Themen 5
S File überwachen Allgemeine Java-Themen 8
P Applet Funktionalität überwachen Allgemeine Java-Themen 3
O Windows-Prozesse/ Tasks überwachen Allgemeine Java-Themen 3
G Prozesse überwachen und neustarten Allgemeine Java-Themen 3
K Java einen Port überwachen lassen Allgemeine Java-Themen 5
N Fuhrpark mit GPS und einem Java Programm überwachen Allgemeine Java-Themen 25
T Ordner überwachen Allgemeine Java-Themen 6
D Änderungen an einer lokalen Datei abprüfen/überwachen Allgemeine Java-Themen 4
T Prozessorticks/Tastatur überwachen/ -> Wiederholbarkeit? Allgemeine Java-Themen 15
T Datei geöffnet überwachen! Allgemeine Java-Themen 6
G Verzeichnis überwachen Allgemeine Java-Themen 13
M Thread überwachen / auf Thread-Tod reagieren Allgemeine Java-Themen 7
N Neustarten des Codes nach der Fehlermeldung Allgemeine Java-Themen 17
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
P Thread starten / stoppen / neustarten Allgemeine Java-Themen 8
E Applet neustarten Allgemeine Java-Themen 2
T App updaten und neustarten Allgemeine Java-Themen 18
V Java-Programm richtig neustarten? Allgemeine Java-Themen 9
U Programm soll sich nach update neustarten Allgemeine Java-Themen 30
V Thread schlafen lassen oder neustarten? Allgemeine Java-Themen 9
T Herunterfahren oder Neustarten der verschiedenen OS Allgemeine Java-Themen 11
I Thread neustarten Allgemeine Java-Themen 11

Ähnliche Java Themen

Neue Themen


Oben