2015-06-26 91 views
0

我有一個廚師食譜奇怪的問題。讓我告訴你,我是新來的廚師,如果有什麼看起來非常錯誤的話,請原諒我。廚師第一次執行失敗

我有我的戰爭檔案,它是由Spring Boot建立的。我只需要運行java -jar <file>.war -config=config/來運行我的應用程序。

我最近開始嘗試廚師,並開始寫食譜來完成這項工作。

從我的食譜中的代碼如下:

#Some code has been omitted intentionally. 

directory "#{home}" do 
    owner 'root' 
    group 'root' 
    mode '0755' 
    recursive true 
end 

directory "#{home}/config" do 
    owner 'root' 
    group 'root' 
    mode '0755' 
end 
cookbook_file "#{home}/config/ehcache.xml" do 
    source "ehcache.xml" 
    mode "0644" 
end 
# Get the war file from the repo 
remote_file "#{home}/app.war" do 
    source "#{node['baseos']['files_repo_url']}/wars/app.war" 
    owner 'root' 
    group 'root' 
    mode '0644' 
end 

execute 'Run the war file' do 
    command "java -jar '#{home}/app.war' -config='#{home}/config/'" 
    action :run 
end 

戰爭文件,及其內容相關的config文件夾中execute命令被炒魷魚之前被成功複製到各自的目的地。問題是當機器被新創建時kitchen create,第一個kitchen verify會失敗,說'Errno::ENOENT: No such file or directory - java -jar /opt/com/app.war -config=config/'。 這隻發生在第一次。令人驚訝的是,在再次說出kitchen verify後,該應用程序啓動併成功運行。

這很奇怪,因爲所需的文件app.war和config /在機器中已經存在,或者應該已經存在於具有適當權限的機器中。

我知道Chef會按順序處理這些東西,所以如果執行命令是我配方中的最後一行,它應該已經具有運行war文件所需的內容。我瘋了,任何人都可以提供一些見解,這一點?

謝謝!

+0

可能的重複[如何從廚師的食譜背景運行java程序](http://stackoverflow.com/questions/18414090/how-to-run-a-java-program-at-background-from-廚師食譜) –

+0

一個要點或運行的東西和調試輸出可能會有所幫助。我想知道是不是在抱怨戰爭,但配置和我注意到你已經在cookbook_file資源gh_home刪除配置。你的錯誤輸出在配置參數時也看起來不匹配執行資源。 – lamont

+0

對不起,這是一個錯字,它實際上是家,而不是gb_home。現在糾正它。 –

回答

1

雖然這有點違反直覺,但這可能是因爲您的$PATH上沒有java。這可能意味着java沒有安裝,或者它已經安裝,但不是廚師可以找到它的方式。請記住,環境變量只在進程啓動時才被繼承,所以如果您以安裝程序將全局更改設置爲$PATH的方式安裝Java,Chef將無法看到它。一個很好的解決方法是使用JVM二進制文件的完整路徑(/opt/whatever/bin/java或其他)。

+0

非常好。這有很大幫助。非常感謝! –