【问题标题】:Symfony cache:clear command changes folder ownerSymfony 缓存:清除命令更改文件夹所有者
【发布时间】:2016-06-12 13:05:59
【问题描述】:

我在生产中有一个 Symfony 项目,运行 sudo php app/console cache:clear --env=prod 后,文件夹的权限变为

drwxr-xr-x 11 root root 4096 Feb 29 15:08 prod

这不允许用户www-data(apache 默认用户)再访问它。

如何清除缓存并将 www-data 读/写到缓存文件夹?

另外,为我得到的开发模式运行php console cache:clear The stream or file "../app/logs/dev.log" could not
be opened: failed to open stream: Permission denied
和 dev.log 文件已创建并具有以下权限: -rw-r--r-- 1 www-data www-data 2840530 Feb 29 15:01 dev.log

【问题讨论】:

  • sudo -u {owner} php cache:clear -e prod
  • 我不建议你用这个命令清理缓存。我发现它并不总是删除这些文件。而是手动删除缓存中的 prod 和 dev 目录/
  • 不要将其作为 sudo 运行。除非您指定,否则 cache:clear 将在其清除缓存后执行“预热”。这意味着它创建了缓存目录的基本文件夹结构。结果权限将是 root(如果从 sudo 运行)
  • 不仅仅是缓存清除命令。它也是数据库创建、模式更新和尝试写入 dev.log 的所有内容

标签: php symfony caching


【解决方案1】:

请参阅http://symfony.com/doc/current/book/installation.html#configuration-and-setup 中的“设置权限”。

如果你使用 Ubuntu,你可以使用 setfacl

sudo setfacl -R -m u:www-data:rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwx app/cache app/logs

编辑:

$ rm -rf var/cache/* var/logs/* var/sessions/*

$ HTTPDUSER=`ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`
$ sudo chmod -R +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit" var
$ sudo chmod -R +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" var

如果你的电脑上没有 setfacl 命令,你需要安装它;

sudo apt-get install acl

【讨论】:

  • 我刚刚运行了这些命令,但 dev.log 文件仍然不可写。我无法运行任何命令。 -rw-r--r-- 1 www-data www-data 3083769 Feb 29 15:36 dev.log -rw-r--r-- 1 www-data www-data 1728 Feb 29 14:51 prod.log
  • 您收到关于只有日志或缓存仍然抛出错误的错误?
  • 只有日志。缓存从不抛出错误。只是该命令正在尝试写入 dev.log。
  • 是的,它们被删除后,它们是使用以下权限生成的:-rw-rw-r--+ 1 www-data www-data 342359 Feb 29 15:44 dev.log -rw-rw-r--+ 1 www-data www-data 859 Feb 29 15:52 prod.log 这似乎没问题。
  • 是的,导致一些命令从您的 Web 服务器(apache、nginx 等)调用。您需要与该小组合作。
【解决方案2】:

您是否以 root 身份运行控制台/bin? 如果您正在运行一个长脚本,但请尝试:

chown -R webuser:webuser /var

如果直接输入命令,请

su webuser

【讨论】:

    【解决方案3】:

    我们遇到了同样的问题,我们最终以 Apache 用户的身份运行了 cache:clear 命令。

    另一种选择是让脚本以 sudo 运行缓存清除命令,然后重新初始化文件夹权限。

    【讨论】:

    • 不是我的反对意见,但是以 sudo 运行控制台命令会带你进入一个整个痛苦的世界。
    猜你喜欢
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    相关资源
    最近更新 更多