Linux: Wie leite ich stdout & stderr auf logger um?

22

Ich habe ein Programm, das ich beim Start ausführen muss. Es gibt stdout und stderr aus, die ich mit dem Befehl logger in das Systemprotokoll umleiten möchte. Was ich in meinem Startskript habe, ist Folgendes:

/ home / dirname / application_name -v | logger 2> & 1 &

Dies leitet die stdout zu syslog um, aber stderr kommt zur Konsole, so dass ich den Befehl verfeinern muss.

Fred Basset
quelle

Antworten:

30

Sie müssen die Ausgabe von STDERR und STDOUT kombinieren, bevor Sie sie weiterleiten logger. Versuchen Sie dies stattdessen:

/home/dirname/application_name -v 2>&1 | logger &

Beispiel

$ echo "hi" 2>&1 | logger &
[1] 26818
[1]+  Done                    echo "hi" 2>&1 | logger

$ sudo tail /var/log/messages
Apr 12 17:53:57 greeneggs saml: hi

Sie können die abgekürzte Notation auch hier verwenden, wenn Sie sie in einer tatsächlichen Bash-Shell vorsichtig verwenden (nicht zu verwechseln mit Dash):

$ echo "hi" |& logger &

HINWEIS: Dies entspricht <cmd1> 2>&1 | <cmd2>. Verwenden Sie das Obige nur, wenn Sie eine tatsächliche Bash-Shell interaktiv verwenden. Dies ist eine gute Möglichkeit, sich ihr zu nähern.

Auszug aus ABSG

# | & wurde zu Bash 4 als Abkürzung für 2> & 1 | hinzugefügt.

Verweise

slm
quelle
2
slm, keine straftat gemeint, aber die letztere form ist zügelloser bashismusmissbrauch. Die Menge der Probleme, die eine solche unnötige Abkürzung verursachen könnte, ist in keiner Weise den geringen Gewinn wert, den sie mit ihrer Verwendung haben könnten. Zum Beispiel, selbst auf Ihrem eigenen Computer, wenn Sie das oben dashGenannte in ein Skript einfügen und versuchen, das Skript beim Booten auszuführen, um Ihren Boot-Prozess nicht zu beschleunigen immer im Rahmen der interaktiven Schalen nur , oder zumindest so meine Meinung.
mikeserv
@mikeserv - keine Beleidigung 8-). Ich schließe diese ein, da sie im ABSG-Leitfaden enthalten sind. Ich habe (möglicherweise fälschlicherweise) angenommen, dass das OP Bash verwendet, da es angezeigt wurde, 2>&1aber Ihre Warnungen sind recht weise, da es sich bei dem Beispiel um Startups handelt. Ich werde die letzteren Tipps hervorheben und warnen, dass sie nur für interaktive Bash-Shells gedacht sind.
SLM
@mikeserv - nein, es ist ein guter Rat. Im Allgemeinen verwende ich Dash oder sogar Ubuntu nicht, daher bin ich mir dieser Probleme ein bisschen nicht bewusst, aber sie sind immer noch sehr real und es ist gut, darauf hinzuweisen, da Ubuntu / Debian / Dash wahrscheinlich das am häufigsten auftretende Szenario ist.
SLM
Ich benutze auch keine Debians, aber mir wird immer bewusster, dass dies viele tun. Ich benutze es dashallerdings - es ist wirklich schnell.
mikeserv
1
Nun, das ist möglicherweise nicht notwendig - Sie können nicht schnell genug tippen, um in einer interaktiven Shell einen Unterschied zu machen - für die ich zsh verwende. Bei Skripten ist dash jedoch schneller als alle anderen, die ich ausprobiert habe.
mikeserv