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

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

我有一个要使用 Chef 部署的 Java 应用程序。我希望它启动,并允许 Chef 客户端退出。但是,无论我如何运行它,chef-client 似乎都会等待命令完成。

我努力了:

  1. javaw使用execute资源执行
  2. 执行start
  3. 执行start /B
  4. 创建批处理脚本并使用start和运行该脚本start /B

有没有办法可以运行 Java 程序而不阻塞 chef-client?

答案1

编辑:下面的答案适用于 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 脚本时遇到问题,则可能包含相关信息。

答案2

我最终通过将程序设为服务并以此方式运行来解决这个问题。Windows 服务需要更改代码或服务包装器。 亚美尼亚联合社会主义者对我来说很管用。YAJSW 很容易设置,因为它包含脚本来帮助生成配置、安装为服务以及运行服务。在 chef 配方中,我包括在测试机器上生成的配置文件,并使用内置脚本安装和运行服务。

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

相关内容