Puppet 在pp exec中更改文件夹的所有者

Puppet 在pp exec中更改文件夹的所有者,puppet,vagrant,chown,Puppet,Vagrant,Chown,我正在尝试开发一个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/Mo

我正在尝试开发一个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]
我可以通过SSHing到vm并执行以下操作来消除错误

[vagrant@myserver ~]$ sudo su -
[root@myserver ~]# chown -R vagrant. /var/lib/php/session/
我不想每次重启vm时都这样做,所以我尝试将其添加到myserver.pp

exec { 'chown':
  command => 'chown -R vagrant. /var/lib/php/session/',
  path => '/bin',
  user => 'root'
}
但它在启动vm时出错

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,因此上面的代码只是我能想到的最好的猜测,如果这是一个简单的修复方法,我道歉


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

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

exec { 'chown':
  command => '/bin/chown -R vagrant:vagrant /var/lib/php/session/',
  path => '/bin',
  user => 'root'
}
它应该在国际海事组织起作用

然而,这在很大程度上取决于您如何安装应用程序。如果应用程序的设置/启动也是使用Puppet管理的,那么您也可以使用Puppet管理您感兴趣的目录,如下所示

file { "/var/lib/php/session" : 
  ensure => directory,
  group => "vagrant",
  owner => "vagrant",
  recurse => true,
}
在启动应用程序之前。这更像是傀儡方式,因为您管理一个资源,而不是执行命令。但是,通常是/var/lib/。。。不应由root以外的其他人拥有

所以,你也许应该研究一下你的应用程序是如何启动的,并让它以另一个用户或root用户的身份启动。如果以exec启动,则可以添加其他属性

user => root

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

exec { 'chown':
  command => '/bin/chown -R vagrant:vagrant /var/lib/php/session/',
  path => '/bin',
  user => 'root'
}
它应该在国际海事组织起作用

然而,这在很大程度上取决于您如何安装应用程序。如果应用程序的设置/启动也是使用Puppet管理的,那么您也可以使用Puppet管理您感兴趣的目录,如下所示

file { "/var/lib/php/session" : 
  ensure => directory,
  group => "vagrant",
  owner => "vagrant",
  recurse => true,
}
在启动应用程序之前。这更像是傀儡方式,因为您管理一个资源,而不是执行命令。但是,通常是/var/lib/。。。不应由root以外的其他人拥有

所以,你也许应该研究一下你的应用程序是如何启动的,并让它以另一个用户或root用户的身份启动。如果以exec启动,则可以添加其他属性

user => root

我刚刚测试了你的前两个建议。两个都失败了,但至少第二个提供了有用的错误消息。它失败是因为它是在/var/lib/php存在之前运行的。我没有想到会是这种情况,因为我在类的顶部有
include apache::php
,但是在进一步阅读日志之后,事实上php是在后面添加的。我必须找到实际发生的位置,但我想我将首先把重点放在以root用户身份启动它上。您可以在文件资源文件{/var/lib/php/session:sure=>目录,group=>“vagrant”,owner=>“vagrant”中使用require来管理操作顺序,recurse=>true,require=>Class['apache::php']}我刚刚测试了您的前两个建议。两个都失败了,但至少第二个提供了有用的错误消息。它失败是因为它是在/var/lib/php存在之前运行的。我没有想到会是这种情况,因为我在类的顶部有
include apache::php
,但是在进一步阅读日志之后,事实上php是在后面添加的。我必须找到实际发生的位置,但我想我将首先把重点放在以root用户身份启动它上。您可以在文件资源文件{/var/lib/php/session:sure=>目录,group=>“vagrant”,owner=>“vagrant”中使用require来管理操作顺序,recurse=>true,require=>Class['apache::php']}