class Chef::Provider::Cron::Unix
Private Instance Methods
read_crontab()
click to toggle source
# File lib/chef/provider/cron/unix.rb, line 31 def read_crontab crontab = nil status = popen4("crontab -l #{@new_resource.user}") do |pid, stdin, stdout, stderr| crontab = stdout.read end if status.exitstatus > 1 raise Chef::Exceptions::Cron, "Error determining state of #{@new_resource.name}, exit: #{status.exitstatus}" end crontab end
write_crontab(crontab)
click to toggle source
# File lib/chef/provider/cron/unix.rb, line 42 def write_crontab(crontab) tempcron = Tempfile.new("chef-cron") tempcron << crontab tempcron.flush tempcron.chmod(0644) exit_status = 0 error_message = "" begin status, stdout, stderr = run_command_and_return_stdout_stderr(:command => "/usr/bin/crontab #{tempcron.path}",:user => @new_resource.user) exit_status = status.exitstatus # solaris9, 10 on some failures for example invalid 'mins' in crontab fails with exit code of zero :( if stderr && stderr.include?("errors detected in input, no crontab file generated") error_message = stderr exit_status = 1 end rescue Chef::Exceptions::Exec => e Chef::Log.debug(e.message) exit_status = 1 error_message = e.message rescue ArgumentError => e # usually raised on invalid user. Chef::Log.debug(e.message) exit_status = 1 error_message = e.message end tempcron.close! if exit_status > 0 raise Chef::Exceptions::Cron, "Error updating state of #{@new_resource.name}, exit: #{exit_status}, message: #{error_message}" end end