Windows
如何在 Windows 上使用 Chef 配方在後台執行命令?
我有一個使用 Chef 部署的 Java 應用程序。我希望它啟動,並允許 Chef 客戶端退出。但是,無論我如何執行它,似乎 chef-client 都在等待命令完成。
我試過了:
javaw
使用execute
資源執行- 執行與
start
- 執行與
start /B
- 創建一個批處理腳本並使用 and 執行
start
它start /B
有沒有辦法在不阻塞廚師客戶端的情況下執行 Java 程序?
我最終通過使程序成為服務並以這種方式執行它來解決這個問題。Windows 服務需要程式碼更改或服務包裝器。 YAJSW為我工作。YAJSW 易於設置,因為它包含幫助生成配置、作為服務安裝和執行服務的腳本。在廚師食譜中,我包含在測試機器上生成的配置文件,並使用內置腳本安裝和執行服務。
一個問題是確保執行服務的使用者可以執行服務。
**編輯:**下面的答案適用於 Linux,而不是 Windows。這可能不是您需要的,但由於我已經寫了它而沒有註意到這是一個 Windows 問題,為了潛在的未來讀者,我會留下它。
在 Linux 上可以這樣做:
我想您可以編寫一個 bash 腳本並將其作為服務執行。我正在使用該
daemon
軟體包來執行此操作。這是您可以開始的範例食譜:# the package that lets you easily define new services package "daemon" # script file used by service to launch your java program file "/my/path/run_script.cmd" do content "java --flag1 --flag2 -jar /my/program.jar\n" end # setup the service (based on the script above), # start it, and make it start at boot cookbook_file '/etc/init.d/myservice' do source 'etc_initd_myservice' end service "myservice" do supports :restart => true, :start => true, :stop => true, :reload => true action [:enable] end
請注意,您需要將一個名為的文件添加
etc_initd_myservice
到您的食譜中。您可以將此答案中的內容用作此文件的基礎。這是使用“守護程序”包將腳本作為服務執行的文件。此外,如果您在定義服務和在同一配方中創建其 init.d 腳本時遇到問題,則以下問題可能包含相關資訊。