2016-04-11 12 views
0

Ich versuche, die Protokollausgabe von einer Software im Servermodus auf localhost in der Bash-Skript erfassen, die die Kommunikation mit dem Server über nc auslöst.Capture-Server-Terminal-Ausgabe in lokalen Bash-Skript

Der Server wird wie folgt gestartet:

java -Xms4g -Xmx6g -jar target/Semafor-3.0-alpha-04.jar model-dir:../semafor_malt_model_20121129 port:4444

Die Mitteilung des Bash-Skript ist:

cat file | nc localhost 4444 > ./output 

Dies fängt den STDERR Ausgang wie bei nc schön ist.

Aber ich kann viele Log-Nachrichten im Terminal-Fenster scrollen, wo ich den Server gestartet habe, und meine Frage ist, wie ich diese Nachrichten im Bash-Skript erfassen kann (und sie so unter einem bestimmten Dateinamen file.log speichern) , was würde für jede Datei anders sein)?

Ich habe verschiedene Vorschläge versucht, wie die Ausgabe von dem in einer Variablen bash Befehl Erfassung

var=$(cat file | nc localhost 4444 > ./output) 

oder sogar versuchen, die Terminal-Ausgabe mit script aber ohne Erfolg zu erfassen. Ich bin hier eindeutig von meiner Tiefe entfernt, und alle Hinweise würden dankbar empfangen werden.

Antwort

0

Ich glaube, Sie screen verwenden:

screen -S session_name -L -X eval 'java...' 

-L Flagge ein Protokoll mit dem ganzen Zeug generieren Sie auf dem aktuellen Verzeichnis benötigen.

Grüße,

+0

Danke für den Vorschlag. Der Bildschirm ist neu für mich und ich scheine Fehler zu finden, wenn Java und Pfadkomponenten nicht gefunden werden. Werde heute Abend richtig loslegen und dann vielleicht relevantere Fragen haben. – Alexander

+0

Tut mir leid, ich habe Probleme damit zu arbeiten. Alle Klassenpfad- und andere Pfadinformationen scheinen bei der Verwendung des Bildschirms verloren zu gehen. Gibt es einen Weg um dies zu umgehen? Ich habe versucht, relative durch absolute Pfade zu ersetzen, aber einige sind in ENV-Variablen definiert, die ich nicht leicht ändern kann. Irgendwelche Ideen? – Alexander

+0

Es gibt mehrere Möglichkeiten, dieses Problem zu lösen, aber der einfachste Weg ist die Verwendung des Befehls setenv. Weitere Informationen finden Sie [hier] (http://unix.stackexchange.com/questions/157202/how-to-set- Bildschirm-Umgebungsvariable-von-Bash). – aalf1987