使用root:root而不是webapp:webapp创建的Laravel日志文件

时间:2015-05-07 03:13:17

标签: php laravel file-permissions

在我的应用程序中,我使用每天在00:00 UTC创建的laravel.log文件。但是,有时文件是使用root创建的:root用户/组而不是通常的webapp:webapp(apache用户)。这会导致我的应用程序崩溃,因为应用程序无法再写入它。我注意到文件所有权可能会在文件写入一段时间后(几分钟)发生变化。

  1. 在创建文件后,可能导致文件所有权发生变化的原因是什么?
  2. Laravel是否有办法尝试/捕获日志记录,以便应用程序不会因文件写入错误而崩溃?
  3. 存储目录和文件的权限不是问题,因为它已经很好地工作了很长时间。只有laravel.log文件的所有权偶尔会在没有干预的情况下发生变化。

2 个答案:

答案 0 :(得分:1)

您应该使用php_sapi_name()而不是get_current_user()。正如杰森关于你试过的答案的评论所解释的那样。

  

请注意,get_current_user()返回当前PHP脚本的所有者(根据php.net),而不是当前正在运行脚本的用户。我使用php_sapi_name()代替,它给出了php处理程序的名称(例如apache或cli),它们往往会以不同的用户身份运行。

通过这种方式,您可以获得2个单独的日志,用于Web服务器和命令行(包括队列侦听器)。

答案 1 :(得分:0)

找到解决方案here

他的解决方案让我意识到问题是我的队列监听器。在极少数情况下,当我的网络应用程序有机会在午夜UTC(几分钟后)之后轮换日志文件之前,我的队列侦听器就会启动,该文件将以root所有者身份创建。

我修改了日志文件名以包含当前用户,从而隔离了每个用户的日志,避免了任何权限问题。