2016-11-12 37 views
0

我正在考虑使用LockHandler,但有一个问题。锁是否禁止在项目的不同实例中运行相同的命令?换句话说,我可能会在不同的VHOST下的一台服务器上运行我的项目的多个实例。 (即www.instance1.com & www.instance2.com)如果我为每个项目设置一个cron作业以运行命令“app:cron”,执行该命令的第一个项目将停止另一个项目运行其“应用程序: cron“命令,如果它们碰巧重叠,甚至同时发生火灾?Symfony LockHandler

如果是这样,当我构造锁定处理程序时,我应该只将实例特定名称注入构造函数中?

一审:

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

二审:

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

@Kadriles下面给出的答案是正确的,我想补充,为别人寻找到这一点。

LockHandler使用PHP函数sys_get_temp_dir()获取要使用的临时文件夹。它(使用我上面的例子INSTANCE1)会在以下格式的文件:sf.instance1问候锁[64CHAR HASH] .lock 当你创建一个锁Symfony的“打开”的文件,因此filessytem看到文件正在使用,当它释放它时,它会“关闭”文件,但实际上并没有删除它 - 这让我几分钟后就离开了。

我结束了创建主机的参数,并预先考虑,要在构造函数中使用像这样的名字:

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

回答

0

LockHandler创建您的临时目录中的文件。

它与VHOST无关。

所以,如果你所有的虚拟主机相同的系统(和相同的临时文件夹)上运行,你必须使用不同的锁名称,如果你不希望任何VHOST锁定等。