Chef 执行第一次失败
Chef execute fails for the first time
我对厨师食谱有一个奇怪的问题。让我告诉你,我是 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
war 文件和相关的配置文件夹及其内容在 execute
命令被触发之前成功复制到各自的目的地。问题是当使用 kitchen create
重新创建机器时,第一个 kitchen verify
会失败,显示 'Errno::ENOENT: No such file or directory - java -jar /opt/com/app.war -config=config/'
。
这只是第一次发生。意外的是,再说kitchen verify
之后,app启动了,并且成功运行s.
这很奇怪,因为所需的文件 app.war 和配置/已经 [或应该] 已经存在于具有适当权限的机器中。
我知道 Chef 按顺序处理这些事情,因此鉴于执行命令是我食谱中的最后一行,它应该已经包含 运行 war 文件所需的内容。我要疯了,谁能提供一些对此的见解?
谢谢!
虽然这有点违反直觉,但这可能是因为您的 $PATH
上没有可用的 java
。这可能意味着 java 未安装,或者已安装但 Chef 无法找到它。请记住,环境变量仅在进程启动时继承,因此如果您安装 Java 的方式使得安装程序对 $PATH
设置了一些全局更改,则 Chef 将看不到它。一个好的解决方法是使用 JVM 二进制文件的完整路径(/opt/whatever/bin/java
或其他)。
我对厨师食谱有一个奇怪的问题。让我告诉你,我是 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
war 文件和相关的配置文件夹及其内容在 execute
命令被触发之前成功复制到各自的目的地。问题是当使用 kitchen create
重新创建机器时,第一个 kitchen verify
会失败,显示 'Errno::ENOENT: No such file or directory - java -jar /opt/com/app.war -config=config/'
。
这只是第一次发生。意外的是,再说kitchen verify
之后,app启动了,并且成功运行s.
这很奇怪,因为所需的文件 app.war 和配置/已经 [或应该] 已经存在于具有适当权限的机器中。
我知道 Chef 按顺序处理这些事情,因此鉴于执行命令是我食谱中的最后一行,它应该已经包含 运行 war 文件所需的内容。我要疯了,谁能提供一些对此的见解?
谢谢!
虽然这有点违反直觉,但这可能是因为您的 $PATH
上没有可用的 java
。这可能意味着 java 未安装,或者已安装但 Chef 无法找到它。请记住,环境变量仅在进程启动时继承,因此如果您安装 Java 的方式使得安装程序对 $PATH
设置了一些全局更改,则 Chef 将看不到它。一个好的解决方法是使用 JVM 二进制文件的完整路径(/opt/whatever/bin/java
或其他)。