1

下面的代码应该下载一个脚本并在一个流浪的客人上执行它。脚本已下载,但从未运行。有谁知道如何确保下载后执行 shell 脚本?

remote_file "/home/vagrant/conscript_setup.sh" do
  source "#{node.default['conscript']['url']}"
  notifies :run, "bash[install conscript]", :immediately
end

bash "install conscript" do
  cwd "/home/vagrant"
  code <<-EOH
    cwd "/home/vagrant"
    chown vagrant:vagrant conscript_setup.sh
    chmod 777 conscript_setup.sh
    conscript_setup.sh
  EOH
end
4

1 回答 1

2

运行脚本时,您需要完整(绝对)路径,因为它不在 shell 的执行路径中。

我有一个工作示例(类似),供您参考

temp=Chef::Config[:file_cache_path]

remote_file "#{Chef::Config[:file_cache_path]}/screenfetch.sh" do
  source "https://raw.github.com/KittyKatt/screenFetch/master/screenfetch-dev"
  mode 00755
end

bash 'screenfetch' do
  code <<-EOF
    #{temp}/./screenfetch.sh > #{temp}/screenfetch.log 2>/dev/null
  EOF
end

模式位在下载时设置。您可以相应地更改您的食谱。

顺便说一句:您可以启用调试以查看更多信息

对于chef-solo=>chef-solo -c solo.rb -j node.json -l debug

Vagrant + Chef Solo 示例(使用chef.arguments

config.vm.provision :chef_solo do |chef|
  # vagrant + chef-solo provision log level
  # equivalent to VAGRANT_LOG=info vagrant up
  chef.arguments = "-l debug"
  chef.add_recipe "apt"
  chef.add_recipe "nginx"
end

如果chef-arguments不起作用,只需VAGRANT_LOG=debug vagrant up

于 2013-10-08T03:39:00.413 回答