を混合防ぐため、一つのファイルに書き込む:問題は、出力が最終にアップ混合してもよいということである2つのプロセスが同じように、私は2つのプロセスからの出力を取得し、一つのファイルにマージしたい出力
proc1 >> output &
proc2 >> output &
ファイル。例えば 最初のプロセスが書き込んだ場合:
hellow
を第2の処理は、書き込み:
BYE
結果のようなものであってもよい。
hebylloe
が、私は(順序は重要ではありません)それらのような別々のラインであることを期待:
さようなら
ハロー
だから私は同期するために群れを使用次のスクリプトを使用してファイルに書き込みます。
exec 200>>output
while read line;
flock -w 2 200
do echo $line>>output
flock -u 200
done
などのプロセスを実行します。
proc1 | script &
proc2 | script &
を今の問題は、性能が大幅に減少していることです。同期を行わないと、各プロセスは4MB /秒の速度で書き込むことができますが、同期スクリプトを使用すると、書き込み速度は1MB /秒になります。
2つのプロセスからの出力をマージし、出力のミキシングを防ぐ方法を教えてもらえますか?
編集: 私は、行の長さと標準バッファのサイズの間に関係があり、各行のサイズが標準のバッファサイズより小さければすべてがうまく動作し、何も混在しないことを認識しました(少なくとも私のテストでは) 。 bufsizeコマンドで各スクリプトを実行しました。
bufsize -o10KB proc1 | script &
bufsize -o10KB proc2 | script &
ここでは、このソリューションが防弾であることを確認します。私はバッファサイズと現在何が起こるかとの間に何らかの関係を見つけることができません!
あなたは2つのだけのプロセスを持っている場合は、なぜ2つの出力ファイルを書き込めませんし、その後、その後、それらをマージ?それをスケールアップする必要がある場合は、log4jのようなアペンダーを使用して調べてください。 – xxfelixxx
'echo" $ line ">> output'(引用符で囲む)を使用する方が良い(問題を解決しない)方がいいです。 –
何を書いていますか?プレーンなログファイルの場合、2つのprocsが同じファイルに書き込むと、大量のデータを読み込むヒーローは混乱します。または、あなたはいつかデータベースに行く何かを書いていますか?今すぐ始めましょう。何らかの理由で –