Linux: como redirecionar stdout & stderr para o logger?

22

Eu tenho um programa que 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 tenho no meu script de inicialização é o seguinte:

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

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

bassê fred
fonte

Respostas:

30

Você precisa combinar a saída de STDERR e STDOUT antes de conectá-la 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 com cautela em um shell Bash real (para não confundir com o Dash):

$ echo "hi" |& logger &

NOTA: Isso é equivalente a <cmd1> 2>&1 | <cmd2>. Novamente, use apenas o descrito acima ao usar um shell Bash real de maneira interativa, seria uma boa maneira de abordá-lo.

trecho de ABSG

# | & foi adicionado ao Bash 4 como uma abreviação de 2> & 1 |.

Referências

slm
fonte
2
slm, nenhuma ofensa significava, mas a última forma é o abuso excessivo do basismo. A quantidade de problemas que uma taquigrafia desnecessária poderia causar não vale o pouco ganho obtido com seu uso. Por exemplo, mesmo em sua própria máquina, se você colocar o texto acima em um script e dashtentar executar o script na inicialização apenas para falhar e impedir o processo de inicialização ... bem ... Quando essa sintaxe é mencionada, deve estar sempre no contexto do interativas conchas única , ou, pelo menos, tal é a minha opinião.
mikeserv
@mikeserv - sem ofensa cometida 8-). Eu os incluo, pois estão no guia ABSG. Eu assumi (possivelmente incorretamente) que o OP estava usando o Bash desde que eles apareceram, 2>&1mas seus avisos são bastante sábios, dado que o exemplo está lidando com startups. Tornarei essas dicas mais proeminentes com um aviso de que elas destinam-se apenas a conchas Bash interativas.
Slm
@mikeserv - não, é um bom conselho. Geralmente não uso o Dash ou o Ubuntu, por isso estou um pouco alheio a esses problemas, mas eles ainda são muito reais e é bom indicá-los, já que o Ubuntu / Debian / Dash provavelmente é o cenário mais comum.
Slm
Também não uso debian, honestamente, mas estou cada vez mais consciente do que muitos o fazem. Eu uso dash, no entanto - é realmente rápido.
mikeserv
1
Bem, isso pode não ser necessário - você não pode digitar rápido o suficiente para fazer a diferença em um shell interativo - para o qual eu uso o zsh. Mas, para scripts, o traço é mais rápido do que qualquer outro que eu tentei.
mikeserv