Linux: como redirecionar o stdout e o stderr para o logger?

18

Eu tenho um programa que eu preciso executar na inicialização, ele tem saída em stdout e stderr que eu quero redirecionar para o log do sistema usando o comando logger. O que eu tenho no meu script de inicialização é thie:

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

Isso está redirecionando o stdout para syslog muito bem, mas stderr está chegando ao console, então preciso refinar o comando.

    
por fred basset 12.04.2014 / 23:36

1 resposta

25

Você precisa combinar a saída de STDERR e STDOUT antes de direcioná-lo para logger . Tente isso:

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

Exemplo

$ 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

Você também pode usar a notação abreviada aqui, se usada cautelosamente em um shell Bash real (não confundir com Dash):

$ echo "hi" |& logger &

NOTA: Isso equivale a <cmd1> 2>&1 | <cmd2> . Mais uma vez, use apenas o acima, ao usar interativamente uma camada Bash, seria uma boa maneira de abordá-la.

trecho de ABSG

# |& was added to Bash 4 as an abbreviation for 2>&1 |.

Referências

por 12.04.2014 / 23:52