複数のプロセスが同じログ ファイルに書き込もうとしたときに、ログ ファイルが文字化けするのを回避するために syslog を使用する方法を教えてください。

複数のプロセスが同じログ ファイルに書き込もうとしたときに、ログ ファイルが文字化けするのを回避するために syslog を使用する方法を教えてください。

複数のプロセスが同じログファイルに書き込もうとしているときのsyslogの使い方を知りたいです。

for i in $var
do
some process >> logfile &
done
wait

答え1

できるよ

some process | logger &

プロセスを起動し、その出力を syslog に出力します。デフォルトの facility は「user」、デフォルトの level は「notice」になることに注意してください。オプションを使用してこれらを変更できます-p

これが問題なく動作する理由は、プロセスが宛先ファイルに直接書き込まないからです。プロセスはメッセージを syslog デーモンに送信し、syslog デーモンが適切なファイルへの書き込みを管理します。私が理解している限りでは、アトミック性は行ベースです。つまり、プロセスからの出力の各行は干渉なく syslog に送信されますが、複数行のメッセージには他のプロセスからの行が混ざる可能性があります。

関連情報