如何在Windows上使用Chef recipe在后台执行命令?

我有一个我正在与厨师部署的Java应用程序。 我希望它开始,并允许厨师客户端退出。 然而,似乎厨师客户端等待命令完成,无论我如何运行它。

我努力了:

  1. execute资源执行javaw
  2. 执行与start
  3. start /B执行
  4. 创build批处理脚本并使用startstart /B

有没有办法运行Java程序,而不阻止厨师客户端?

编辑:下面的答案适用于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的文件添加到您的食谱中。 您可以使用此答案中的内容作为此文件的基础。 这是使用“守护程序”包作为服务运行脚本的文件。

另外,如果您在定义服务和在同一个配方中创build其init.d脚本时遇到问题, 那么以下问题可能包含相关信息。

我最终通过使程序成为服务来解决这个问题,并以这种方式运行。 Windows服务需要代码更改或服务包装。 YAJSW为我工作。 YAJSW很容易设置,因为它包括帮助生成configuration,作为服务安装和运行服务的脚本。 在厨师食谱中,我包含了在testing机器上生成的configuration文件,并使用脚本中的内置安装和运行服务。

一个问题是确保运行该服务的用户可以运行服务。