我有几个Symfony2网站,我遇到有关cli用户和缓存目录的问题。
CentOS 6.7 Apache 2.2.31 PHP 5.5.28 Symfony 2.7.1(使用Symfony3 dir结构)
我已按照Symfony2安装指南中的说明操作,并且我使用setfacl方法正确设置缓存文件夹的权限。如此处所示(第3部分):
http://symfony.com/doc/current/book/installation.html
在我们的服务器上,http用户是“没人”。我已将此添加到脚本中确定http用户的部分,该部分在实际更改权限之前运行。
HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx|[n]obody' | grep -v root | head -1 | cut -d\ -f1`
出现问题的地方是我通过ssh登录并运行脚本来清除生产缓存:
php bin/console cache:clear --env=prod
如果我运行此命令会发生的事情是删除缓存文件夹,然后它会被预热'所以文件夹被重新创建,但现在我是所有者(而不是没人),并且目录上的权限不再设置相同。
//Before (immediately after setting S2 permissions):
drwxrwsr-x+ 2 nobody (group) 4096 Aug 27 08:00 cache/
//After running command and cache is warmed up:
drwxr-sr-x 6 (my SSH user) (group) 4096 Aug 27 08:03 cache/
...或者我运行这个......
php bin/console cache:clear --env=prod --no-warmup
如果我在没有预热的情况下运行此命令,缓存文件夹仍然会被删除,但是一旦获得一些流量,就会重新创建缓存文件夹,这次由所有人拥有,但权限再次不正确。
//Before (immediately after setting S2 permissions):
drwxrwsr-x+ 2 nobody (group) 4096 Aug 27 08:07 cache/
//After running command and cache is rebuilt:
drwxr-sr-x 6 nobody (group) 4096 Aug 27 08:10 cache/
这不断导致“没有人”的问题。关于无法在缓存文件夹中创建目录。我发现它的唯一方法是在清除缓存后每次重新创建缓存目录后重置这些文件夹的权限。
在我看来,clear:cache命令应该是删除缓存目录的内容,而不是目录本身。否则,每次清除缓存时都必须重置权限。这对我来说似乎不对。
任何帮助都将不胜感激。
答案 0 :(得分:0)
您可以使用它来清除缓存作为您的网络服务器用户:
sudo -u [someuser] php app/console cache:clear
将[someuser]
替换为nobody
之后权限应该仍然可以。
答案 1 :(得分:0)
为了回答这个问题,用户malcolm指导我正确的方向,也许我的目录结构不正确。他是对的。我最初使用Symfony3目录结构在Composer中安装了Symonfy2。做了一个小的symfony更新后,我意识到缓存和日志目录现在回到了app文件夹中,就像它们在旧结构中一样。所以我将脚本添加到AppKernel.php文件中以将它们指回到var文件夹,但忽略了在缓存目录之后提供环境变量。因此,不要删除' dev'或者' prod'文件夹,缓存:清除命令正在删除整个缓存文件夹。谢谢你的帮助!