Linux:標準出力と標準エラーをロガーにリダイレクトする方法は?

Linux:標準出力と標準エラーをロガーにリダイレクトする方法は?

起動時に実行する必要があるプログラムがあり、stdoutとstderrに出力があり、loggerコマンドを使用してシステムログにリダイレクトしたいと思います。私の起動スクリプトの内容は次のとおりです。

/home/dirname/application_name -v|ロガー2>&1 &

これにより、stdoutがsyslogにリダイレクトされます。これは問題ありませんが、stderrがコンソールに表示されるため、コマンドを改善する必要があります。

答え1

にパイプする前に、STDERRとSTDOUTの出力を組み合わせる必要がありますlogger。この試み:

/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 シェルを対話的に使用する場合にのみ、上記を使用することをお勧めします。

から抜粋ABSG

# |& は 2>&1 | の略で Bash 4 に追加されました。

引用する

答え2

stdoutとstderrをsyslogの異なるレベルに記録することもできます。

{ ( echo info; >&2 echo critical ) 2>&3 | logger -t mycoolscript; } 3>&1 1>&2 | logger -t mycoolscript -p 2

最初の部分は、( echo info; >&2 echo critical )stdoutとstderrに出力を印刷するプログラムをシミュレートします。

秘訣は2>&3これから来る。回答、stdout、stderrを他のプロセスに出力できます。

journalctl -f結果を観察するために、systemdでLinuxを使用できます。

関連情報