我有一个我正在与厨师部署的Java应用程序。 我希望它开始,并允许厨师客户端退出。 然而,似乎厨师客户端等待命令完成,无论我如何运行它。
我努力了:
execute
资源执行javaw
start
start /B
执行 start
和start /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文件,并使用脚本中的内置安装和运行服务。
一个问题是确保运行该服务的用户可以运行服务。