Search code examples
ruby-on-railsrubycronwhenever

Update crontab (Whenever gem)


By executing the whenever --update-crontab command, the following error returns:

/usr/lib/ruby/vendor_ruby/whenever/cron.rb:132:in `parse_as_string': Couldn't parse: 31557600 (ArgumentError)
    from /usr/lib/ruby/vendor_ruby/whenever/cron.rb:112:in `parse_time'
    from /usr/lib/ruby/vendor_ruby/whenever/cron.rb:50:in `time_in_cron_syntax'
    from /usr/lib/ruby/vendor_ruby/whenever/cron.rb:42:in `output'
    from /usr/lib/ruby/vendor_ruby/whenever/cron.rb:36:in `block (2 levels) in output'
    from /usr/lib/ruby/vendor_ruby/whenever/cron.rb:35:in `each'
    from /usr/lib/ruby/vendor_ruby/whenever/cron.rb:35:in `block in output'
    from /usr/lib/ruby/vendor_ruby/whenever/cron.rb:34:in `each'
    from /usr/lib/ruby/vendor_ruby/whenever/cron.rb:34:in `output'
    from /usr/lib/ruby/vendor_ruby/whenever/job_list.rb:151:in `block (2 levels) in cron_jobs'
    from /usr/lib/ruby/vendor_ruby/whenever/job_list.rb:147:in `each'
    from /usr/lib/ruby/vendor_ruby/whenever/job_list.rb:147:in `block in cron_jobs'
    from /usr/lib/ruby/vendor_ruby/whenever/job_list.rb:146:in `each'
    from /usr/lib/ruby/vendor_ruby/whenever/job_list.rb:146:in `cron_jobs'
    from /usr/lib/ruby/vendor_ruby/whenever/job_list.rb:65:in `generate_cron_output'
    from /usr/lib/ruby/vendor_ruby/whenever.rb:10:in `cron'
    from /usr/lib/ruby/vendor_ruby/whenever/command_line.rb:54:in `whenever_cron'
    from /usr/lib/ruby/vendor_ruby/whenever/command_line.rb:106:in `updated_crontab'
    from /usr/lib/ruby/vendor_ruby/whenever/command_line.rb:35:in `run'
    from /usr/lib/ruby/vendor_ruby/whenever/command_line.rb:6:in `execute'
    from /usr/bin/whenever:41:in `<main>'

My schedule.rb file:

every 1.year do
  rake "maintenances:renew"
end

Any ideas?


Solution

  • If you're having problems with 1.year method, you can use the two following alternatives.

    1 - Shortcuts

    every :year do
      rake "maintenances:renew"
    end
    

    2 - Expressions

    every '0 0 1 12 *' do
      rake "maintenances:renew"
    end
    

    If you want to learn more about these options, check the official documentation.

    To test expressions, I recommend crontab.guru