【问题标题】:Chef execute fails for the first time厨师执行第一次失败
【发布时间】:2015-09-13 19:59:52
【问题描述】:

我对厨师食谱有一个奇怪的问题。让我告诉你,我是 Chef 的新手,如果看起来很不对劲,请原谅我。

我有我的 war 文件,它是由 Spring Boot 构建的。我只需要运行java -jar <file>.war -config=config/ 来运行我的应用程序。

我最近开始尝试使用 Chef,并开始编写能够完成这项工作的食谱。

我的食谱中的代码如下:

#Some code has been omitted intentionally.

directory "#{home}" do
  owner 'root'
  group 'root'
  mode '0755'
  recursive true
end

directory "#{home}/config" do
  owner 'root'
  group 'root'
  mode '0755'
end
cookbook_file "#{home}/config/ehcache.xml" do
  source "ehcache.xml"
  mode "0644"
end
# Get the war file from the repo
remote_file "#{home}/app.war" do
   source "#{node['baseos']['files_repo_url']}/wars/app.war"
   owner 'root'
   group 'root'
   mode '0644'
end

execute 'Run the war file' do
  command "java -jar '#{home}/app.war' -config='#{home}/config/'"
  action :run
end

execute 命令被触发之前,war 文件和相关的配置文件夹及其内容已成功复制到各自的目的地。问题是当机器用kitchen create 重新创建时,第一个kitchen verify 会失败,说'Errno::ENOENT: No such file or directory - java -jar /opt/com/app.war -config=config/'。 这只是第一次发生。令人惊讶的是,再次说出kitchen verify 后,应用程序启动并成功运行。

这很奇怪,因为所需的文件 app.war 和 config/ 已经[或应该] 存在于具有适当权限的机器中。

我知道 Chef 会按顺序处理这些事情,因此鉴于执行命令是我配方中的最后一行,它应该已经具备运行 war 文件所需的内容。我要疯了,谁能提供一些关于这个的见解?

谢谢!

【问题讨论】:

  • 一个要点或一些运行和调试输出可能会有所帮助。我想知道是否不是在抱怨战争而是在抱怨配置,我注意到你在 cookbook_file 资源中有 gh_home 来删除配置。当涉及到 config 参数时,您的错误输出看起来也与执行资源不匹配。
  • 抱歉打错了,它实际上是 home,而不是 gb_home。现在更正了。
  • @Mark 我什至不明白它怎么能被认为是你提到的另一个问题的重复。你能再回答一遍这个问题吗?这是我遇到的问题。这不是在后台运行某些东西。这是关于根本无法运行的东西。

标签: ruby spring-boot chef-infra test-kitchen


【解决方案1】:

虽然这有点违反直觉,但这可能是因为您的$PATH 上没有java。这可能意味着未安装 java,或者它已安装但不是以 Chef 可以找到的方式。请记住,环境变量仅在进程启动时被继承,因此如果您安装 Java 时安装程序设置了一些对 $PATH 的全局更改,则 Chef 将看不到它。一个好的解决方法是使用 JVM 二进制文件的完整路径(/opt/whatever/bin/java 或其他东西)。

【讨论】:

  • 优秀。这有很大帮助。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 2014-10-25
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多