Laravel 5.1中的文件权限问题

3
我使用的是Laravel 5.1,日志设置为每天生成。
我大量使用任务。Web服务器是Apache,因此PHP以apache用户身份执行,所以在一天结束时,由apache用户生成新的日志文件,并且文件权限为0644。我已经通过Supervisor配置了工作进程,由apache用户运行。(到目前为止都很好)
现在,对于队列中的随机峰值,我设置了一个脚本来运行更多的工作进程(队列的消费者)。我面临的问题是,由于日志文件以0644权限生成,其他用户没有写入文件的权限。
我可以想到几个解决方案:
  • root用户身份启动工作进程(无法执行,因为我没有权限)
  • 每天00:00:00更改文件权限为0646的cron任务(也需要root权限)
  • 手动由当前用户在00:00:00生成日志文件,以便我有权限更改权限为0646(不可靠,如果apache首先创建它会怎样)
  • apache用户身份启动工作进程(由于没有root权限,因此不可能)
  • Unix SE网站上的这个问题

所以我的问题是什么是最好的方法来做到这一点,这对我来说似乎是一个普遍的问题,任何开发人员都可能面临。或者除了上述方法之外,还有没有更好的方法。


你不能使用supervisor API启动worker,以便它也作为apache运行吗? - ZeissS
我偶尔需要运行工作进程,而且任何与监督员相关的操作都需要使用sudo(如果我理解有误请纠正我)。 - Ashwani Agarwal
/etc/crontab/有一个<user>字段,可以使用该用户启动cron。 - Junaid
不,我不会使用cron来运行worker。Worker将由一个脚本执行,该脚本由另一个用户(而不是apache)运行。 - Ashwani Agarwal
1个回答

1

[..] 其他用户没有文件的写入权限。

您确定要让这些用户直接访问该文件吗?您可以在 Laravel 应用程序中添加 API 来提供此文件(甚至仅提供其中一些经过筛选的数据)。这还允许您在应用程序中拥有更细粒度的访问控制等。


这是一个有效的观点,我想这将限制我的选择只能是第四个选项。我的问题是我需要为其他用户提供写入权限,因为我可能需要从其中运行工作程序。 - Ashwani Agarwal
1
如果是日志文件,只有您的Laravel应用程序才能写入它。让工作人员或其他东西使用API或拥有自己的日志文件。 - ZeissS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接