Project

General

Profile

Feature #11218

Updated by nobu (Nobuyoshi Nakada) about 4 years ago

fluentdという、OSSのログコレクタがあるのですが、これには`in_tail`プラグインというものがあります。 fluentdという、OSSのログコレクタがあるのですが、これにはin_tailプラグインというものがあります。
これは、ログファイルを監視して、ログがファイルに追記されたらその分を読み込んでJSONにして他に流します。

このログファイルはfluentdではない他の誰か、ApacheだったりRailsだったりします。
この手のログファイルを書いていく流儀はいくつかありますが、ご存じの通りRailsやApacheは基本的に特定のパスにひたすら追記し続け、
それでは肥大化しすぎるのでlogrotateなどと組み合わせて適宜rotateしていく運用が一般的でしょう。
つまり、ログファイルをrenameし、ApacheやRailsなどにsignalで再起動して新しいファイルに書くわけです。

ところで、Windowsは誰かが開いているファイルをrenameすることはできないので通常このようなことは出来ません。
やるにはファイルを開く際の`CreateFile`に`FILE_SHARE_DELETE`フラッグをつけてやる必要があります。 やるにはファイルを開く際のCreateFileにFILE_SHARE_DELETEフラッグをつけてやる必要があります。
そんなことやってる人いるのかというご指摘もあるとは思いますが、やる人はやっているようです。
https://issues.apache.org/jira/browse/HADOOP-8564

さて、RubyのWindowsの`open(2)`ラッパー、`rb_w32_open`/`rb_w32_wopen`はテキストモードの場合は`_open`/`_wopen`を使っており、 さて、RubyのWindowsのopen(2)ラッパー、rb_w32_open/rb_w32_wopenはテキストモードの場合は_open/_wopenを使っており、
これはおいておくとして、バイナリモードの場合は`CreateFile`を使っているものの現状`FILE_SHARE_DELETE`は渡していないので、 これはおいておくとして、バイナリモードの場合はCreateFileを使っているものの現状FILE_SHARE_DELETEは渡していないので、
なんらかの手段で`FILE_SHARE_DELETE`を付けられるようになりませんか。 なんらかの手段でFILE_SHARE_DELETEを付けられるようになりませんか。

Back