Linux: come reindirizzare stdout e stderr al logger?


22

Ho un programma che devo eseguire all'avvio, ha un output su stdout e stderr che voglio reindirizzare al registro di sistema usando il comando logger. Quello che ho nel mio script di avvio è thie:

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

Questo sta reindirizzando lo stdout su syslog, ma stderr sta arrivando sulla console, quindi ho bisogno di affinare il comando.


Risposte:


30

È necessario combinare l'output di STDERR e STDOUT prima di collegarlo a logger. Prova questo invece:

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

Esempio

$ 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

Puoi anche usare la notazione abbreviata qui, se usato con cautela in una shell Bash reale (da non confondere con Dash):

$ echo "hi" |& logger &

NOTA: questo equivale a <cmd1> 2>&1 | <cmd2>. Ancora una volta utilizzare quanto sopra solo quando si fa uso di una shell Bash in modo interattivo, sarebbe un buon modo per accedervi.

estratto da ABSG

# | & è stato aggiunto a Bash 4 come abbreviazione di 2> & 1 |.

Riferimenti


2
slm, nessuna offesa significava, ma quest'ultima forma è un abuso di bashismo dilagante. La quantità di problemi che tale abbreviazione superflua potrebbe causare non vale affatto il poco guadagno che si potrebbe ottenere dal loro uso. Ad esempio, anche solo sulla propria macchina, se si inserisce quanto sopra in uno script e si dashtenta di eseguire lo script all'avvio solo per fallire e ridurre il processo di avvio ... beh ... Quando viene menzionata tale sintassi, dovrebbe essere sempre nel contesto delle sole shell interattive , o almeno questa è la mia opinione.
Mikeserv,

@mikeserv - nessuna offesa presa Cool). Includo questi poiché sono nella guida ABSG. Ho ipotizzato (probabilmente in modo errato) che l'OP stesse usando Bash da quando hanno mostrato, 2>&1ma i tuoi avvertimenti sono abbastanza saggi, dato che l'esempio riguarda le startup. Renderò questi ultimi suggerimenti più importanti con un avvertimento che sono pensati solo per shell Bash interattive.
slm

@mikeserv - no, è un buon consiglio. In genere non uso Dash o Ubuntu, quindi sono un po 'ignaro di questi problemi, ma sono ancora molto reali ed è bene segnalarli poiché Ubuntu / Debian / Dash è probabilmente lo scenario più comune.
slm

Neanche io uso i debian, onestamente, ma sto diventando sempre più consapevole che molti lo fanno. Lo uso dash, però, è davvero veloce.
Mikeserv,

1
Bene, potrebbe non essere necessario - non puoi scrivere abbastanza velocemente da fare la differenza in una shell interattiva - per cui uso zsh. Ma, per gli script, il trattino è più veloce di tutti gli altri che ho provato.
Mikeserv,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.