毎日、ログファイルにすべてのロギング(出力、エラーなど)をキャプチャするスクリプトがあります。
スクリプトは1日10,000回以上呼び出すことができ、最大3回の同時呼び出しが可能です。
現在私が経験している問題は、同時に実行されたときにログ記録が同じログファイルに互いに記録されることがあることです。
この問題を解決するためにクラスタリングやセマフォなどのオプションを検討してきましたが、これによりプロセス自体の実行時にキューが生成される可能性がありますが、これは私の場合は必要ありません。
だから、他の種類の異なるプロセスでロギングを実行し、他のプロセスがログファイルに書き込まれない場合にのみログファイルに書き込むことができるかどうか疑問に思います。その結果、ログファイルは「クリーン」になり、呼び出しスクリプトは現在遅延なく実行されます。
答え1
logger
ほとんどのLinuxディストリビューションで利用可能なコマンドを使用するとどうなりますか?それは同じです
logger "this is my log message"
デフォルトでは、ログを次に送信する必要があります。/var/log/syslog
これをスクリプトから呼び出すと、オペレーティングシステムとシステムの標準ロギングデーモンを介してログエントリを生成して、管理する並行性の問題を処理できます。
詳しくはマニュアルページをご覧くださいlogger
。ログレベルなどを含めて調整するオプションがたくさんあります。
syslog
ログの回転、圧縮、ファイル名など、特別な方法でこれらのログを(通常)処理するようにシステムロガーを設定することもできます。