だから私はフォルダとその内容を削除するスクリプトを作成したいのですが、これを実行している間に新しいファイルが作成される可能性があります。これを行うための最良の方法は何ですか?
いくつかの例は-「キャッシュ」フォルダがあり、キャッシュ全体を削除したいのですが、これを実行している間、キャッシュフォルダに作成されたファイルが増え、削除できなかったために空になることはありません。
ディレクトリを別の場所に移動します (/tmp
たとえば)。その後、それを削除します。移動はアトミックで迅速です (これは、ファイル システム上の単なるポインターの変更であり、フォルダーの内容に関係なく、大量のディスク I/O を実際に必要としないためです)。
あらゆるタイプの問題に対する最高の回復力を得るには、次のようなディレクトリ構造を作成する必要があります。
/var/www/website/
releases/
1111/
1112/
1113/
current_release/
あなたのウェブサイトが現在 にあるとしましょう/var/www/website/releases/1113/
。あなたのApacheは、にシンボリックリンクされているものでセットアップする必要がありDocumentRoot
ます/var/www/website/current_release/
/var/www/website/releases/1113
キャッシュをクリアする必要がある場合は、 などの新しいリリースをデプロイする必要があります/var/www/website/releases/1114
。ti がデプロイされ、キャッシュ ディレクトリが空になったら、シンボリック リンクを/var/www/website/current_release/
新しいリリース ディレクトリに切り替えます。
Apache は、空のキャッシュ フォルダーを使用して、新しいディレクトリからファイルを提供します。
これは、サーバーをオフラインにする以外に、このようなことを達成するための唯一の真にアトミックな方法です (これは通常、キャッシュをクリアするような些細なことのオプションではありません)。
これは、問題に対する一種のエンタープライズレベルのソリューションですが、運用サーバーも簡単にロールバックできるという追加の利点があります (シンボリックリンクを以前のバージョンに切り替えるだけです)。この問題について非常に懸念している場合は、オーバーエンジニアリングのように思えるかもしれませんが、これが正しい方法です。