it-swarm.com.de

Linux: Wie leite ich stdout & stderr zum Logger um?

Ich habe ein Programm, das ich beim Start ausführen muss. Es hat eine Ausgabe auf stdout und stderr, 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 & 

Dadurch wird das stdout problemlos in syslog umgeleitet, aber stderr kommt zur Konsole, sodass ich den Befehl verfeinern muss.

22
fred basset

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

/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 in einer tatsächlichen Bash-Shell vorsichtig verwendet werden (nicht zu verwechseln mit Dash):

$ echo "hi" |& logger &

HINWEIS: Dies entspricht <cmd1> 2>&1 | <cmd2>. Verwenden Sie das oben Gesagte nur, wenn Sie eine tatsächliche Bash Shell interaktiv verwenden. Dies wäre ein guter Weg, um sich dem anzunähern.

Auszug aus ABSG

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

Verweise

31
slm