Linux: comment rediriger stdout & stderr vers logger?

22

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 ça:

/ 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.

fred basset
la source
Utilisateur >&: tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html
Boris Burkov

Réponses:

30

Vous devez combiner la sortie de STDERR et STDOUT avant de la canaliser 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 véritable shell Bash (à 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 d' ABSG

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

Les références

slm
la source
2
slm, aucune infraction signifiait, mais cette dernière forme est un abus de bashisme rampant. La quantité de problèmes que cette sténographie inutile pourrait causer ne vaut pas du tout le peu de gain que l'on pourrait retirer de leur utilisation. Par exemple, même uniquement sur votre propre machine, si vous placez ce qui précède dans un script et dashessayez d'exécuter le script au démarrage pour échouer et accélérer votre processus de démarrage ... eh bien ... Quand une telle syntaxe est mentionnée, elle devrait toujours être dans le contexte des shells interactifs uniquement , ou, du moins, tel est mon avis.
mikeserv
@mikeserv - aucune infraction prise 8-). Je les inclue car ils sont dans le guide ABSG. J'ai supposé (peut-être à tort) que l'OP utilisait Bash car ils l'ont montré, 2>&1mais vos avertissements sont assez sages, étant donné que l'exemple concerne les startups. Je mettrai ces derniers conseils en évidence avec un avertissement qu'ils sont destinés uniquement aux shells Bash interactifs.
slm
@mikeserv - non, ce sont de bons conseils. Je n'utilise généralement pas Dash ou même Ubuntu, donc je suis un peu inconscient de ces problèmes, mais ils sont toujours très réels et il est bon de les signaler car Ubuntu / Debian / Dash est probablement le scénario le plus courant.
slm
Honnêtement, je n'utilise pas non plus les debians, mais je suis de plus en plus conscient que beaucoup le font. J'utilise dash, cependant - c'est vraiment rapide.
mikeserv
1
Eh bien, cela peut ne pas être nécessaire - vous ne pouvez pas taper assez rapidement pour que cela fasse une différence dans un shell interactif - pour lequel j'utilise zsh. Mais, pour les scripts, le tiret est plus rapide que tous les autres que j'ai essayés.
mikeserv