def run
old_env = {}
@environment.each do |k,v|
next unless %w(MAILTO PATH).include?(k)
old_env[k] = (ENV[k].nil? ? nil : ENV[k])
ENV[k] = v
end
output = []
@records.select{|record| record.ready?}.each do |record|
this_output = record.run
if this_output.length > 0
output << record.command+":\n"
output += this_output
output << "\n"
end
end
old_env.each do |k,v|
if v.nil?
ENV.delete(k)
else
ENV[k] = v
end
end
return if output.empty?
if @environment['MAILTO'] and !@environment['MAILTO'].to_s.empty?
cron_env = @environment.merge(ENV){|k,o,n| o}
mail = []
mail << "To: #{@environment['MAILTO']}"
mail << "Subject: Cron output for #{@filename}"
%w(SHELL PATH HOME LOGNAME).each do |k|
mail << "X-Cron-Env: <#{k}=#{cron_env[k]}>" if ENV.has_key?(k)
end
mail << "Date: #{DateTime.now.to_time.rfc2822}"
mail << ""
mail << output.join
if @mail_output
IO.popen(@mail_command,"w+") do |pipe|
pipe.write mail.join("\n")
pipe.close
end
else
puts mail.join("\n")
end
else
puts output
end
end