Windows

如何在 Windows 上使用 Chef 配方在後台執行命令?

  • February 18, 2013

我有一個使用 Chef 部署的 Java 應用程序。我希望它啟動,並允許 Chef 客戶端退出。但是,無論我如何執行它,似乎 chef-client 都在等待命令完成。

我試過了:

  1. javaw使用execute資源執行
  2. 執行與start
  3. 執行與start /B
  4. 創建一個批處理腳本並使用 and 執行startstart /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 腳本時遇到問題,則以下問題可能包含相關資訊。

引用自:https://serverfault.com/questions/478268