web-dev-qa-db-fra.com

Linux: comment rediriger stdout & stderr vers logger?

J'ai un programme que je dois exécuter au démarrage, il a une sortie sur stdout et stderr que je veux rediriger vers le journal système à l'aide de la commande logger. Ce que j'ai dans mon script de démarrage, c'est:

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

Ceci redirige très bien la stdout vers syslog mais stderr arrive sur la console, j'ai donc besoin d'affiner la commande.

22
fred basset

Vous devez combiner la sortie de STDERR et STDOUT avant de la rediriger vers logger. Essayez plutôt ceci:

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

Exemple

$ 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

Vous pouvez également utiliser la notation abrégée ici, si elle est utilisée avec précaution dans un shell Bash réel (à ne pas confondre avec Dash):

$ echo "hi" |& logger &

REMARQUE: Cela équivaut à <cmd1> 2>&1 | <cmd2>. Encore une fois, utilisez uniquement ce qui précède lors de l'utilisation interactive d'un shell Bash réel, ce serait un bon moyen de l'approcher.

extrait de ABSG

# | & a été ajouté à Bash 4 comme abréviation pour 2> & 1 |.

Références

31
slm