【问题标题】:How to Execute Script After Download?下载后如何执行脚本?
【发布时间】:2013-10-08 11:39:00
【问题描述】:

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

【问题讨论】:

  • 您可以添加代码以确认脚本已正确安装和chmoded 吗?祝你好运
  • 如果没有指向您的conscript_setup.sh 的显式路径,bash 会尝试在$PATH 中搜索它(它可能找不到它)。因此,尝试使用./conscript_setup.sh 的显式路径运行脚本。

标签: shell chef-infra vagrant chef-recipe


【解决方案1】:

当您运行脚本时,您需要完整(绝对)路径,因为它不在您的 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

【讨论】:

  • 天啊,天才!我的朋友,谷歌众神今天保佑了。昨天我花了 2 个小时搜索/试图弄清楚这一点,但是由于 Chef 令人困惑的文档,我永远无法做到。 (为什么他们有这么多似乎可以做完全相同的事情的命令,我永远不会明白...... [模板,脚本,bash,执行])。直到现在,甚至从未遇到过 remote_file。今天上班后 5 分钟内解决了这个问题……“vagrant provision shell chef 等效”成功了 :)
猜你喜欢
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 2020-01-18
  • 2011-07-11
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
相关资源
最近更新 更多