我想要实现的是一个 capistrano3 任务,它在所有服务器上执行一个日志文件 grep - 这将节省大量时间,因为我们有很多服务器,因此手动或什至编写脚本但顺序需要很长时间。
我有一个粗略的边缘任务,它实际上可以工作,除非其中一个服务器没有为 grep 返回任何内容。在这种情况下,整个命令都会失败。
因此想知道是否有办法设置capture
接受空退货。
namespace :admin do
task :log_grep, :command, :file do |t,args|
command = args[:command] || 'ask for a command'
file = args[:file] || 'log_grep_results'
outs = {}
on roles(:app), in: :parallel do
outs[host.hostname] = capture(:zgrep, "#{command}")
end
File.open(file, 'w') do |fh|
outs.each do |host,out|
fh.write(out)
end
end
end
end