2016-03-22 12 views
0

私はcronを使って30秒-1分ごとに新しいテキストダンプを実行して生成する小さなプログラムを持っています。cronジョブから作成したファイルを読む

program > dump.txt 

は、しかし、私は誰かがWebページを訪問するたびに、読み取り専用モードでテキストダンプにアクセスし、別のPHPのWebプログラムを持っています。問題は、もし私がLinuxがファイルをロックしないと思うので、誰かがウェブサイトにアクセスすると、クロールジョブが実行されているWebページがファイルの半分しか読めないかもしれないと私は信じている。>が使用されている。

私がやって考えていた:PHPのWebページがメモリ内のダンプを読み込むとき

echo "###START###" > dump.txt 
program >> dump.txt 
echo "###END###" >> dump.txt 

はその後、私がしようとし、その後、開始と終了のフラグが存在しない場合はあるかどうかを確認するために正規表現を行うことができ両方のフラグを持つファイルが読み込まれるまで再度実行します。

ファイルの整合性を保証しますか?もしそうでなければ、どうすれば私がdump.txtを読むとそれは完全であることを保証できます。

答えて

4

ファイルをディレクトリに作成するのではなく、別の場所に作成してみましょう。その後、データが書き込まれた後、Webルートに移動して前のセットを上書きします。

例:

sh create_some_data.sh > /home/cronuser/my_data.html 
mv /home/cronuser/my_data.html /var/www/ 
+0

私はMVと前のセットを上書きする場合は、PHPのWebプログラムは500行のダンプを読んでいる間、私は半分だけ古いファイルまたはいくつかの未定義の動作を受けることができます?多分私の4番目の行はmvコマンドかもしれないので、まれなイベントが起こった場合に2つのフラグを確認することができます。 – Brandon

+0

タイミングが悪いために新しいファイルではなく古いファイルを受け取ることがありますが、古いファイルの半分を受け取ることはできません。アクティブな古いファイルへのアクティブなポインタがある限り、ファイルシステムはそのデータを上書きしません。 mvコマンドは、ファイルの一部を書き込むこととは関係ありません。それは、ファイルシステムツリー内のあるinodeから別のinodeへファイルへのリンクを移動します。読み込みを行うと、ファイルシステムはあなたが要求したinodeからの読み込みを保証します。 – aestrivex

+0

名前が同じファイルシステム上にある場合は、リネーム(または移動、実際は同じものです)はアトミックです。だから、@aestrivexが言います。疑問がある場合は、maildirがどのようにしているかを見てください。 – izak

関連する問題