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