下载后如何执行脚本?

时间:2013-10-07 14:44:00

标签: shell chef vagrant chef-recipe

下面的代码应该下载一个脚本并在流浪客人身上执行。脚本已下载,但从未运行过。有谁知道如何确保在下载后执行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

1 个答案:

答案 0 :(得分: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

模式位在下载时设置。您可以相应地更改配方。

BTW:您可以启用调试以查看更多信息

chef-solo =&gt; 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