Input/Output Prozessüberwachung Dateiänderung

G

GeisterGesicht

Gast
Guten Tag Community,

ich habe eine kurze Frage, wobei ich mir nicht sicher bin, ob sie in den Anfänger-Bereich gehört oder nicht.
Folgendes:
Ich möchte ein Programm(P) schreiben, welches ein anderes Programm(AP) überwacht.
Dabei ist nicht wichtig zu beobachten, was alles AP macht usw., auch der Netzwerkverkehr etc. ist nicht wichtig. AP schreibt aber mehrmals in der Sekunde (vllt. alle 200-300ms) in eine Datei. Ich möchte jetzt mit P diesen Zugriff beobachten und die Datei nach jeder Änderung schnell auslesen, oder was sogar besser wäre, den OutputStream von AP, der in die Datei schreibt direkt kopieren und selbst verarbeiten.
Ist das irgendwie mit dem ProzessBuilder möglich? Oder wäre es einfacher und besser die Datei zu prüfen, z.B. alle 50ms und bei Änderung die Datei zu kopieren bzw. auszulesen?

Sinn und Zweck ist es, die Logs, die AP schreibt direkt zur Laufzeit von AP mit dem Programm P zu bearbeiten, bzw. mit den in den Logs stehenden Werten etwas zu berechnen.

Grüße
GeisterGesicht
 
G

GeisterGesicht

Gast
Wenn ihr mehr Informationen braucht sagt bescheid, vielleicht habe ich mich nicht richtig ausgedrückt.

Grüße
GeisterGesicht
 
S

SuFuGooGLe

Gast
Wenn du mal richtig GooGLe und die SuFu genutzt hättest wüsstest du das es dieses Thema bereits in x-vielen Varianten schon gibt.

Möglichkeiten :

1) das Log schneller lesen als es geschrieben wird was natürlich gerade auf den Platten-Cache drückt
2) zuüberwachendes Programm so ändern das es nicht in ein File schreibt sondern in System.out und diesen dann vom Monitor lesen
3) JNA/JNI und dich direkt in den Prozess hooken und versuchen da was anzuzapfen oder i-wie vom OS aus benachrichtigt zu werden (über call-back) wenn in das File geschrieben wird
4) Pipes/File-Sockets nutzen
5) es einfach lassen

Wenn dir das zu überwachende Programm keine direkte Möglichkeit bietet die Daten direkt zu lesen und du es auch nicht umschreiben kannst ist es so mit pure Java nur möglich wenn du das Log-File schneller liest als es geschrieben wird (wobei eigentlich jedes Logging-Framwork File-Lock oder ähnliches verwenden sollte).


[ot]Warum kommen eigentlich immer wieder leute auf diese total verrückte Idee irgendwelche (Log-)Files lesen zu wollen während diese geschrieben werden ? Wenn man mit diesen Daten LIVE arbeiten will braucht man ne Schnittstelle die eben das möglich macht. Ansonsten geht es nur mit "dreckigen Hacks" was dann sicher nicht im Sinne des Entwicklers ist.[/ot]
 

tagedieb

Top Contributor
Die meisten Logframeworks unterstuetzen mehrere Adapter. So könnte man in 2 verschiedene Adapter schreiben. z.B. a) in ein File und b) den LogEvent uebers Netzwerk verschicken. So wird kann Program P jede LogMessage ueberwachen ohne unnoetigerweise das LogFile einzulesen.
 
G

GeisterGesicht

Gast
Wenn du mal richtig GooGLe und die SuFu genutzt hättest wüsstest du das es dieses Thema bereits in x-vielen Varianten schon gibt.
Hab ich genutzt, aber sag mir bitte, welche Schlagworte du benutzt hast. Das einzige was ich gefunden habe, ist der ProzessBuilder und das habe ich auch schon ausgetestet. Allerdings habe ich das Problem, dass das Programm AP als Administrator ausgeführt werden muss und habe das auch schon über das Ausführen der Cmd mit dem Befehl "runas" probiert. Das Programm startet dann auch, allerdings komme ich von dem Hauptfenster nicht weiter, da die Verbindung zum Server nicht aufgebaut werden kann (also evtl. doch fehlende Admin-Rechte, das muss ich im Task-Manager später nochmal prüfen).

Möglichkeiten :
1) das Log schneller lesen als es geschrieben wird was natürlich gerade auf den Platten-Cache drückt
Ja, die Möglichkeit hatte ich ja auch schon angesprochen. Ist halt die Frage ob es effizient ist, was wohl eher nicht der Fall ist ;)


2) zuüberwachendes Programm so ändern das es nicht in ein File schreibt sondern in System.out und diesen dann vom Monitor lesen
Okay, dass wird wohl nicht möglich sein.

3) JNA/JNI und dich direkt in den Prozess hooken und versuchen da was anzuzapfen oder i-wie vom OS aus benachrichtigt zu werden (über call-back) wenn in das File geschrieben wird
Danke, das werde ich mir mal genauer ansehen.

4) Pipes/File-Sockets nutzen
Danke, das werde ich mir ebenfalls mal genauer ansehen.

5) es einfach lassen
Ich habe ein Problem, was ich lösen will. Wieso einfach aufgeben?


[ot]Warum kommen eigentlich immer wieder leute auf diese total verrückte Idee irgendwelche (Log-)Files lesen zu wollen während diese geschrieben werden ? Wenn man mit diesen Daten LIVE arbeiten will braucht man ne Schnittstelle die eben das möglich macht. Ansonsten geht es nur mit "dreckigen Hacks" was dann sicher nicht im Sinne des Entwicklers ist.[/ot]
Vielleicht geht es auch einfach um sowas abwegiges, dass die Entwickler nicht damit gerechnet haben, dass man die Daten irgendwie zur Laufzeit verarbeiten will?

tagedieb hat gesagt.:
Die meisten Logframeworks unterstuetzen mehrere Adapter. So könnte man in 2 verschiedene Adapter schreiben. z.B. a) in ein File und b) den LogEvent uebers Netzwerk verschicken. So wird kann Program P jede LogMessage ueberwachen ohne unnoetigerweise das LogFile einzulesen.
Da hätte ich vielleicht mehr schreiben sollen. Das Programm AP ist nicht von mir und auch nicht in Java verfasst, bzw. Quellcode auch nicht einsehbar.

Grüße
GeisterGesicht
 

Neue Themen


Oben