PHP读取由不同Linux用户创建的锁定文件?

时间:2016-01-27 08:34:21

标签: php linux permissions locking

在我的Linux服务器上,我有2个Linux用户:

  • Jim - 维护其他用户使用的中央框架存储库,包括一些第三方开源库,例如Jobby
  • Rob - 使用Jim维护的框架来完成特定的工作。

Jobby是一个PHP cron管理脚本,它在/tmp/xxxxx.lck为已经启动的每个作业/进程创建一个锁文件。

Rob 进来之前, Jim 曾经做过所有的事情,包括中央框架和具体工作。因此,cron脚本将以 Jim 的形式运行,锁定文件将由 Jim 创建并拥有,因此脚本读取锁定文件没有问题。

然而,当 Rob 进入并接管具体工作时, Rob 的cron脚本以 Rob 运行,后者调用Jobby图书馆由 Jim 拥有。因此,锁定文件由 Jim 创建并拥有。现在 Rob 的cron脚本无法读取由 Jim 创建的锁定文件并继续给出Jobby错误:

  

错误:无法打开文件(文件:/tmp/xxxx.lck)。

基本上,脚本A( Rob )调用脚本B( Jim )创建/tmp/xxxx.lck(-rw-r - r-- 1 Jim)吉姆),有没有安全的方法让脚本A( Rob )能够读取/tmp/xxxx.lck?

但不是权限(-rw-r - r--)可以,因为它允许任何人读取文件?这真的很奇怪。

那为什么Jobby会出现这个错误?

更新

当我写这个问题时,我会发现我应该找出为什么Jobby首先抛出这个错误。我发现了这个:

Form1 formname = new Form1();
Application.Run(formname);

// access to form by formname.yourproperty

所以它要求锁定文件的读取和写入权限。

由于锁文件是(-rw-r - r-- 1 Jim Jim)Rob的脚本无法写入它 - 我猜这是问题吗?

但为什么Jobby会将文件创建为 Jim ,但会将其打开为 Rob

我有什么方法可以将创建,然后打开文件作为Rob?

1 个答案:

答案 0 :(得分:0)

这很尴尬。似乎/tmp/xxxx.lck最初是由Jim在Rob进来之前创建的。

所以我需要的是将文件/tmp/xxxx.lck删除为Jim。现在当Rob运行他的脚本时,同样的锁文件将被创建为Rob,而且一切都好了。