Linux: bagaimana cara mengarahkan stdout & stderr ke logger?

22

Saya punya program yang harus saya jalankan saat startup, ia memiliki output pada stdout dan stderr yang ingin saya redirect ke log sistem menggunakan perintah logger. Apa yang saya miliki dalam skrip startup saya adalah thie:

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

Ini mengarahkan stdout ke syslog baik-baik saja tetapi stderr akan datang ke konsol, jadi saya perlu memperbaiki perintah.

fret basset
sumber

Jawaban:

30

Anda harus menggabungkan output dari STDERR dan STDOUT sebelum mengirimnya logger. Coba ini sebagai gantinya:

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

Contoh

$ 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

Anda dapat menggunakan notasi yang disingkat di sini juga, jika digunakan dengan hati-hati dalam shell Bash yang sebenarnya (jangan dikacaukan dengan Dash):

$ echo "hi" |& logger &

CATATAN: Ini setara dengan <cmd1> 2>&1 | <cmd2>. Sekali lagi hanya menggunakan hal di atas ketika menggunakan Bash shell yang sebenarnya secara interaktif, akan menjadi cara yang baik untuk mendekatinya.

kutipan dari ABSG

# | & ditambahkan ke Bash 4 sebagai singkatan untuk 2> & 1 |.

Referensi

slm
sumber
2
Slm, bukan pelanggaran berarti, tetapi bentuk terakhir adalah penyalahgunaan bashism merajalela. Jumlah masalah yang dapat ditimbulkan oleh steno yang tidak perlu tersebut sama sekali tidak sebanding dengan sedikit keuntungan yang bisa didapat dari penggunaannya. Sebagai contoh, bahkan hanya pada mesin Anda sendiri, jika Anda meletakkan di atas dalam skrip dan dashmencoba untuk mengeksekusi skrip saat boot hanya untuk gagal dan memungkiri proses boot Anda ... yah ... Ketika sintaks tersebut disebutkan itu harus selalu dalam konteks cangkang interaktif saja , atau, setidaknya, itulah pendapat saya.
mikeserv
@ mikeserv - jangan tersinggung 8-). Saya memasukkan ini karena mereka ada dalam panduan ABSG. Saya berasumsi (mungkin secara tidak benar) bahwa OP menggunakan Bash karena mereka menunjukkan 2>&1tetapi peringatan Anda cukup bijaksana, mengingat contohnya adalah berurusan dengan startup. Saya akan membuat tips yang terakhir lebih menonjol dengan peringatan bahwa itu dimaksudkan untuk shell Bash hanya interaktif.
slm
@ mikeserv - nggak itu saran suara. Saya biasanya tidak menggunakan Dash atau bahkan Ubuntu jadi saya sedikit tidak menyadari masalah ini tetapi mereka masih sangat nyata dan ada baiknya untuk menunjukkannya karena Ubuntu / Debian / Dash kemungkinan merupakan skenario yang lebih umum.
slm
Saya juga tidak menggunakan debian, tapi saya menjadi semakin sadar bahwa banyak yang melakukannya. Saya menggunakan dash, meskipun - itu benar-benar cepat.
mikeserv
1
Yah, itu mungkin tidak perlu - Anda tidak bisa mengetik cukup cepat untuk membuat perbedaan di shell interaktif - yang saya gunakan zsh. Tetapi, untuk skrip, tanda hubung lebih cepat daripada yang lain yang pernah saya coba.
mikeserv