Ich habe eine Konsolenanwendung, die im Rahmen der Bereitstellung einer neuen Anwendungsversion auf meinem Server ausgeführt werden muss.
Diese Konsolenanwendung ist für die Ausgabe auf der Konsole vorgesehen und kann nicht geändert werden.
Ich möchte es wie gewohnt ausführen, habe aber stdout und stderr in einer Datei protokolliert, während sie gleichzeitig an die Konsole ausgegeben werden.
Wie kann ich das unter Linux machen?
io-redirection
stderr
Benjamin
quelle
quelle
tee
, viele Antworten.script -a the_logfile
#und dann die Apps in der 'Skript'-Umgebung ausführen, die auch Sonderzeichen, Strg-Codes usw. protokolliert und verwendet werden kann, um die Anzeige "wiederzugeben", wenn Sie es schaffen, sie ordnungsgemäß zu verwenden. dh gerade das Protokoll aus der gleichen Art von Terminal und usnig die gleichen Zeilen / Spalten, und mit einem „mehr“ oder „kleinen“ , dass Ausgängen Zeichen Kontrolle (ex:more -v the_logfile
)Antworten:
Sie können verwenden
tee
. Zum Beispiel:Druckt nach Standard und
tmp.txt
enthält eine Kopie der Ausgabe. Wenn Sie stderr in tmp.txt aufnehmen möchten:quelle
cmd 2>&1 | tee ...
. Ich habe dies in bearbeitet.2>&1
funktioniert gut!Sie können
tee
http://en.wikipedia.org/wiki/Tee_(command) verwenden.Nur stdout leiten
So leiten Sie sowohl stdout als auch stderr weiter:
quelle
> >
sein>>
?Es gibt verschiedene Möglichkeiten, dies zu tun.
nohup 2>&1 application &
. Dadurch werden alle Ausgaben an eine Datei namens nohup.out gesendet. Es werden auch SIGHUPs erfasst. Sie können die Shell also schließen und sie läuft weiter. Wenn Sie sehen möchten, was passiert, können Sie die Ausgabe mit verfolgentail -f nohop.out
.tee
Befehl macht dasselbe, ohne SIGHUP zu verhindern. C2h und Goldlöckchen erwähnen dies bereits.screen -L
. Dies wird in diesem Beitrag näher erläutert .Mir ist klar, dass der Bildschirm eine Problemumgehung ist, aber die anderen Funktionen sind für Bereitstellungen sehr hilfreich.
quelle