Sha256: 11ba1030d4461f99869ee0345d995e801e531721dd385923e6e454868e54222f

Contents?: true

Size: 1.36 KB

Versions: 2

Compression:

Stored size: 1.36 KB

Contents

module S3log
  class Cron

    def initialize(configfile)
      @configfile = configfile
      @config = YAML::load_file(configfile)
      @path = File.dirname(File.expand_path(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 "#{@jobname} [update] crontab updated."
      else
        S3log::Log.warn "#{@jobname} [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

2 entries across 2 versions & 1 rubygems

Version Path
s3log-0.0.5 lib/s3log/cron.rb
s3log-0.0.4 lib/s3log/cron.rb