2016-11-12 4 views
0

私はLockHandlerの使用について考えていますが、質問があります。ロックは同じコマンドがプロジェクトの別のインスタンス内で実行されることを禁止しますか?言い換えれば、私は、異なるVHOSTの下で、あるサーバー上でプロジェクトの複数のインスタンスを実行している可能性があります。 (つまり、www.instance1.com & www.instance2.com)コマンド "app:cron"を実行するために、各プロジェクトのcronジョブをセットアップすると、コマンドを実行する最初のプロジェクトは、他のプロジェクトの "app:互いに重なり合ったり、同時に発砲した場合は、「cron」コマンドを使用しますか?Symfony LockHandler

もしそうなら、私はlockhandlerを構築するときに、インスタンス固有の名前をコンストラクタに注入するだけでいいですか?

すなわち

最初のインスタンス:

new LockHandler('instance1.hello.lock'); 

2番目のインスタンスは:@Kadrilesは以下答える

new LockHandler('instance2.hello.lock'); 

が正しい

、ちょうどこのに探して誰のために、追加します。

LockHandlerは、PHP関数sys_get_temp_dir()を使用して、使用する一時フォルダを取得します。 sf.instance1-hello-lock [64CHAR HASH] .lock ロックを作成すると、symfonyはファイルを "開く"ので、filessytemはファイルが使用中であると判断します、それをリリースすると、ファイルを "閉じ"ますが、実際にはそれを削除しません - これは数分間私を捨てました。

私はホストのパラメータを作成し、そのようなコンストラクタで使用される名前にすることをを付加終わった:

$host = $this->getContainer()->getParameter('router.request_context.host'); 
new LockHandler($host . '.hello.lock'); 

答えて

0

LockHandlerは、TEMPディレクトリにファイルを作成します。

VHOSTとは関係ありません。

すべてのVHOSTが同じシステム(同じ一時ディレクトリ)で実行されている場合は、VHOSTで他のものをロックしたくない場合は、別のロック名を使用する必要があります。