【问题标题】:Laravel permission issue with cachingLaravel 缓存权限问题
【发布时间】:2021-11-18 18:55:24
【问题描述】:

我使用 Centos 7。

我有一个关于操作系统权限的问题。我的所有supervisor 进程都以root 用户身份工作。

[root@ip-172-31-9-100 example.com]# ll storage/framework/cache/data/
drwxr-xr-x 3 apache apache 16 Sep 22 11:29 00
drwxr-xr-x 5 apache apache 36 Sep 26 10:27 02
drwxr-xr-x 3 apache apache 16 Sep 23 15:14 03
drwxr-xr-x 3 apache apache 16 Sep 22 11:30 04
drwxr-xr-x 3 apache apache 16 Sep 22 12:55 05
drwxr-xr-x 3 root root     16 Sep 22 10:47 06
drwxr-xr-x 3 apache apache 16 Sep 23 16:39 08

我的supervisor 配置:

[program:api-horizon]
process_name=%(program_name)s
command=php /var/www/html/example.com/artisan horizon
autostart=true
autorestart=true
user=root
redirect_stderr=true
stopwaitsecs=86400

apache apache 由 laravel 项目创建,root rootsupervisor 进程创建。当 laravel 项目想要使用 root root 权限缓存文件时,我得到一个权限错误:

[2021-09-23 09:00:05] 生产。错误:无法创建可锁定 文件: /var/www/html/example.com/storage/framework/cache/data/e9/a0/e9a039230d7835a69038c5a295dc7bfa88213125。 请确保您有权在此位置创建文件。 {“userId”:605,“异常”:“[对象](异常(代码:0):无法 创建可锁定文件: /var/www/html/example.com/storage/framework/cache/data/e9/a0/e9a039230d7835a69038c5a295dc7bfa88213125。 请确保您有权在此位置创建文件。在 /var/www/html/example.com/vendor/laravel/framework/src/Illuminate/Filesystem/LockableFile.php:73)

请帮我解决这个权限问题。谢谢

【问题讨论】:

    标签: laravel


    【解决方案1】:

    更新您的配置以以apache 用户身份运行:

    [program:api-horizon]
    process_name=%(program_name)s
    command=php /var/www/html/example.com/artisan horizon
    autostart=true
    autorestart=true
    user=apache //instead of root
    redirect_stderr=true
    stopwaitsecs=86400
    

    然后重启supervisor

    sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl restart all
    

    这样,主管将以apache 用户而不是root 运行。它将创建的文件将可由apache 读写,这应该可以解决您的问题。

    从技术上讲,主管的作用是确保进程始终运行。如果您手动执行它,您必须按照它的运行方式对其进行配置。

    在您的情况下,php /var/www/html/example.com/artisan horizon 应该由拥有该项目的用户执行,即apache

    如果您不这样做,那么 Horizo​​n 所做的一切都将由 root 完成。

    Horizo​​n 可以工作 - root 可以做任何事情 - 但是当您的 apache 用户尝试检索数据或写入 root 创建的目录时......你猜对了,permission denied


    不要忘记修复您的权限,因为root 拥有的目录和文件将保留并导致错误,即使您更改了配置。

    执行sudo chown -R apache:apache /var/www/html/example.com/,这样该目录中的所有内容再次归apache所有。

    【讨论】:

      猜你喜欢
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多