Linux: ¿cómo redirigir stdout y stderr al registrador?

22

Tengo un programa que necesito ejecutar al inicio, tiene salida en stdout y stderr que quiero redirigir al registro del sistema usando el comando logger. Lo que tengo en mi script de inicio es thie:

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

Esto está redirigiendo el stdout a syslog muy bien, pero stderr está llegando a la consola, por lo que necesito refinar el comando.

fred basset
fuente

Respuestas:

30

Debe combinar la salida de STDERR y STDOUT antes de conectarlo logger. Intenta esto en su lugar:

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

Ejemplo

$ 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

También puede usar la notación abreviada aquí, si se usa con precaución en un shell Bash real (que no debe confundirse con Dash):

$ echo "hi" |& logger &

NOTA: Esto es equivalente a <cmd1> 2>&1 | <cmd2>. Nuevamente, solo use lo anterior cuando haga uso de un shell Bash real de forma interactiva, sería una buena manera de abordarlo.

extracto de ABSG

# | & se agregó a Bash 4 como abreviatura de 2> & 1 |.

Referencias

slm
fuente
2
slm, sin ofender, pero la última forma es el abuso del bashism rampante. La cantidad de problemas que tal taquigrafía innecesaria podría causar no valen en absoluto la poca ganancia que se podría obtener de su uso. Por ejemplo, incluso en su propia máquina, si coloca lo anterior en un script e dashintenta ejecutar el script en el arranque solo para fallar y arruinar su proceso de arranque ... bueno ... Cuando se menciona dicha sintaxis, debería siempre estar en el contexto de shells interactivos solamente , o, al menos, tal es mi opinión.
mikeserv
@mikeserv - sin ofender 8-). Los incluyo ya que están en la guía ABSG. Supuse (posiblemente incorrectamente) que el OP estaba usando Bash desde que aparecieron, 2>&1pero sus advertencias son bastante sabias, dado que el ejemplo se trata de nuevas empresas. Haré que estos últimos consejos sean más prominentes con una advertencia de que están destinados solo para shells interactivos de Bash.
slm
@mikeserv - no, es un buen consejo. Generalmente no uso Dash o incluso Ubuntu, así que soy un poco ajeno a estos problemas, pero todavía son muy reales y es bueno señalarlos, ya que Ubuntu / Debian / Dash es probable que sea el escenario más común.
slm
Tampoco uso Debians, sinceramente, pero cada vez soy más consciente de que muchos lo hacen. Sin dashembargo, sí uso , realmente es rápido.
mikeserv
1
Bueno, eso puede no ser necesario: no puede escribir lo suficientemente rápido como para que marque la diferencia en un shell interactivo, para lo cual uso zsh. Pero, para los scripts, el guión es más rápido que cualquier otro que haya probado.
mikeserv