2016-04-16 9 views
0

複数のNode.jsプロセスが同じファイルへの書き込みをfs.createWriteStreamで実行すると、データを上書きしないようにシステムを実装する方法はありますか。 fs.createWriteStreamのデフォルトの設定は、そのメソッドが呼び出されたときにファイルが消去されるように見えます。私の目標は、ファイルを一度消去してから、他のすべてのライターにデータを追加させることです。複数のプロセスにわたるfs.createWriteStream

fs.createWriteStreamを使用し、次にfs.appendFileを使用しますか?または、ファイルを開く最初のプロセスだけでなく、各プロセスのストリームを開く方法がありますか?

+0

仲介業者を使用してログ書き込みを委任したことはありますか? syslog、第三者ロギングサービス、または(udpやunixソケットなどの)受信ログ要求をファイルに書き込む専用ノードプロセスなど。 – mscdex

+0

ええ、それは良い観察ですが、実際には私はおそらくそれを行う必要があるでしょう。私は、各子プロセスがファイルに直接パイプするのがより効果的であると考えています。ただし、ファイルのデータが破損し、データが順不同になる可能性がありますか?ですから、stderr(問題のデータ・ストリームです)を単一の親node.jsプロセスにパイプし、そのプロセスがファイルにデータを書き込みます。親procがボトルネックになることは少ないが、おそらく上手くいく。 –

答えて

2

fs.createWriteStreamとfs.appendFileを使用しますか?

のいずれかを使用できます。

fs.createWriteStreamと

あなたは、このようにフラグを変更する必要があります。それが存在しないか、それが存在する場合は、書き込みアクセスでそれを開き、終了するポインタを設定していない場合

fs.createWriteStream('your_file',{ 
    flags: 'a+', // default is 'w' (just 'a' might be enough here, i'm not sure) 
}) 

がこのファイルを作成する必要があります。 (追加モード)

fs.appendFileの使い方は明確で、ほとんど同じです。

ここで、同じファイルにアクセスする複数のプロセスの問題。明らかに、同時に1つのプロセスだけが書き込みアクセスで同じファイルを開くことができます。 したがって、別のプロセスに書き込みアクセス権がある場合は、そのファイルが解放されるのを待つ必要があります。おそらくそれのためのライブラリが必要になります。

例えば、この1:https://www.npmjs.com/package/lockup
か、この1:https://github.com/Perennials/mutex-node
あなたももっとたくさんここに見つけることができます:ここhttps://www.npmjs.com/browse/keyword/lock
か:https://www.npmjs.com/browse/keyword/mutex

を、私はこれらのライブラリのいずれかを試していないが、1つのIあなたが必要とするものをリストに載せなければならない人もいます。

関連する問題