web-dev-qa-db-ja.com

Linux:stdoutとstderrをロガーにリダイレクトする方法は?

起動時に実行する必要のあるプログラムがあります。それは、loggerコマンドを使用してシステムログにリダイレクトするstdoutおよびstderrに出力します。私のスタートアップスクリプトには次のものがあります。

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

これはstdoutをsyslogにうまくリダイレ​​クトしていますが、stderrがコンソールに来ているので、コマンドを調整する必要があります。

22
fred basset

loggerにパイプする前に、STDERRとSTDOUTの出力を組み合わせる必要があります。代わりにこれを試してください:

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

$ 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

実際のBashシェルで慎重に使用されている場合は、ここでも省略表記を使用できます(Dashと混同しないでください)。

$ echo "hi" |& logger &

注:これは<cmd1> 2>&1 | <cmd2>と同等です。繰り返しますが、実際のBash Shellをインタラクティブに利用する場合にのみ上記を使用することは、それに取り組むための良い方法です。

[〜#〜] absg [〜#〜]からの抜粋

#|&は、2>&1 |の省略形としてBash 4に追加されました。

参考文献

31
slm