2012-12-13 74 views
2

我正在嘗試開發一個CakePHP應用程序,並使用Vagrant運行測試環境。然而,我在瀏覽器中收到此錯誤流浪傀儡更改pp文件夾的所有者exec

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方式連接到虛擬機,並做

[[email protected] ~]$ sudo su - 
[[email protected] ~]# chown -R vagrant. /var/lib/php/session/ 

擺脫錯誤的,我不希望有這樣的每一次做我重新啓動虛擬機,所以我嘗試添加這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,所以上面的代碼只是我可以想到的最好的猜測,並且我很抱歉如果這是一個簡單的修復,讓這個工作。

我已經在vm中使用which chown進行了驗證,該路徑爲/bin,並且該命令與我在vm自己運行它時完全相同。我認爲這是造成問題的用戶。我有這條線嗎?是否可以從.pp文件以root身份執行命令?

回答

4

使用exec時,通常必須輸入執行命令的完整路徑。所以如果你改變你的命令爲

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

它應該工作imo。

但是,這取決於您安裝應用程序的方式。如果應用程序的安裝/啓動也與日僞進行管理,也可以啓動您的應用程序之前管理你有興趣與木偶的目錄,這樣

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

。這將更像Puppet方式,因爲你管理資源而不是執行命令。但是,通常/ var/lib/...不應由root以外的其他人所有。

所以你應該看看你的應用程序是如何啓動的,並使其以另一個用戶或root身份啓動。如果它是從一個exec開始的,你可以添加一個附加屬性

user => root 

它也應該這樣做。

+0

我剛剛測試了你的前兩個建議。兩者都失敗了,但至少第二個提供了一個有用的錯誤信息。它失敗了,因爲它正在/ var/lib/php存在之前運行。我不會認爲這會是這種情況,因爲我在該類的頂部包含了「apache :: php」,但是在日誌中進一步閱讀後,php實際上正在被添加。我必須找到實際發生的位置,但我認爲我會專注於以root身份開始。 – jonhopkins

+1

您可以通過使用文件資源需要 文件{「在/ var/lib中/ PHP /會話」有點管理操作順序: 確保=>目錄, 組=>「無業遊民」, 所有者=> 「vagrant」, recurse => true, require => Class ['apache :: php'] } – joshcody