标签: mixlib-shellout

什么时候使用shellout?

什么时候适合在食谱中使用Shellout代替bash块或执行?由于它的日志记录,我倾向于将其默认用于所有外部调用,但是命令的冗长性是一个缺点。

chef-infra mixlib-shellout

2
推荐指数
1
解决办法
1907
查看次数

如何将脚本输出记录到 STDOUT 和文件

我有以下 Ruby 块:

ruby_block "Validate" do
  block do
    require "mixlib/shellout"
    begin
      cmd = Mixlib::ShellOut.new("/usr/local/bin/someScript.py", :timeout => 3600)
      cmd.live_stream = STDOUT
      cmd.run_command
      cmd.error!
    rescue Exception => e
      puts "Action failed..."
      return 168
    end
  end
  action :create
  notifies :create, "ruby_block[Validated]", :immediately
  not_if { node[:state][:validated] == true }
end
Run Code Online (Sandbox Code Playgroud)

我想将脚本的结果记录到 STDOUT 和一个名为“/tmp/xml_diff_results.txt”的文件中。

我做的第一件事是改变:

cmd=Mixlib::ShellOut.new("/usr/local/bin/someScript.py", :timeout => 3600)
Run Code Online (Sandbox Code Playgroud)

到:

cmd=Mixlib::ShellOut.new("/usr/local/bin/someScript.py > /tmp/xml_diff_results.txt", :timeout => 3600)
Run Code Online (Sandbox Code Playgroud)

然而,这并没有达到我的预期。

然后我注意到了这个cmd.live_stream变量。有没有办法我可以利用它并做这样的事情?:

cmd.live_stream = (STDOUT > /tmp/xml_diff_results.txt)
Run Code Online (Sandbox Code Playgroud)

解决方案:

我的问题的解决方案很简单,并受到@tensibai 的启发。

log_file = File.open('/tmp/chef-run.log', File::WRONLY | File::APPEND)
LOG …
Run Code Online (Sandbox Code Playgroud)

ruby mixlib-shellout

2
推荐指数
1
解决办法
1057
查看次数

标签 统计

mixlib-shellout ×2

chef-infra ×1

ruby ×1