Sha256: 4577ffe4c031b80be5701691350614528c332eaef2886f012841f3855fb17dae

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

module S3log
  class Cron

    def initialize(configfile)
      @configfile = configfile
      @config = YAML::load_file(configfile)
      @path = File.dirname(configfile)
      @jobname = @config['jobname']
      @schedule = @config['schedule']
      @logdir = @config['logdir']
      FileUtils.mkdir(@logdir) unless Dir.exists? @logdir
      S3log::Log.set_logger(File.join(@logdir, 's3log.log'), @config['loglevel'])
    end

    def update
      line = "#{@schedule} bash -l -c 'cd #{@path} && bundle exec s3log download -c #{@configfile} >> /dev/null 2>&1' # s3log_#{@jobname}\n"
      tmp_cron_file = Tempfile.open('tmp_cron')
      included = false
      existing.each_line do |l|
        if l =~ Regexp.new("# s3log_#{@jobname}")
          tmp_cron_file << line
          included = true
        else
          tmp_cron_file << l
        end
      end
      tmp_cron_file << "# S3log job #{@jobname}\n#{line}" unless included
      tmp_cron_file.fsync
      if system("crontab #{tmp_cron_file.path}")
        S3log::Log.info "[update] crontab updated."
      else
        S3log::Log.warn "[fail] Couldn't write crontab."
        tmp_cron_file.close!
        exit(1)
      end
    end

    def existing
      existing = %x(crontab -l 2> /dev/null)
      if $?.exitstatus.zero?
        existing
      else
        ""
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
s3log-0.0.3 lib/s3log/cron.rb