2

我正在尝试开发一个 CakePHP 应用程序,并且我正在使用 Vagrant 来运行一个测试环境。但是,我在浏览器中收到此错误

Warning (2):
  session_start() [http://php.net/function.session-start]:
    open(/var/lib/php/session/sess_speva7ghaftl8n98r9id5a7434, O_RDWR) failed:
      Permission denied (13) [CORE/Cake/Model/Datasource/CakeSession.php, line 614]

我可以通过 SSH 连接到 vm 并执行

[vagrant@myserver ~]$ sudo su -
[root@myserver ~]# chown -R vagrant. /var/lib/php/session/

我不想每次重新启动虚拟机时都必须这样做,所以我尝试将其添加到 myserver.pp

exec { 'chown':
  command => 'chown -R vagrant. /var/lib/php/session/',
  path => '/bin',
  user => 'root'
}

但是在启动虚拟机时出现错误...

err:
/Stage[main]/Myserver/Exec[chown]/returns: change from notrun to 0 failed:
  chown -R vagrant. /var/lib/php/session/
  returned 1 instead of one of [0] at /tmp/vagrant-puppet/manifests/myserver.pp:35

我无法exec在互联网上找到任何有用的使用示例,而且我之前从未使用过 Vagrant 或 Puppet,所以上面的代码只是我能想到的最好的猜测,如果这是一个简单的修复,我深表歉意让这个工作。

我已经which chown在 vm 中验证了路径是/bin,并且该命令与我自己在 vm 中运行它时的命令完全相同。我认为是用户造成了问题。我有那条线吗?甚至可以从 .pp 文件以 root 身份执行命令吗?

4

1 回答 1

4

使用 exec 时,通常必须输入所执行命令的完整路径。因此,如果您将命令更改为

exec { 'chown':
  command => '/bin/chown -R vagrant:vagrant /var/lib/php/session/',
  path => '/bin',
  user => 'root'
}

它应该工作海事组织。

但是,这在很大程度上取决于您如何安装应用程序。如果应用的 setup/start 也是用 Puppet 管理的,你也可以用 Puppet 管理你感兴趣的目录,像这样

file { "/var/lib/php/session" : 
  ensure => directory,
  group => "vagrant",
  owner => "vagrant",
  recurse => true,
}

在你启动你的应用程序之前。这将更像是 Puppet 方式,因为您管理资源而不是执行命令。但是,通常 /var/lib/... 不应由 root 以外的人拥有。

因此,您可能应该查看您的应用程序是如何启动的,并使其以其他用户或 root 身份启动。如果它以 exec 开头,您可以添加一个附加属性

user => root

到它,这也应该做的伎俩。

于 2012-12-13T16:22:33.753 回答