Skip to content

Simple scheduler for long-running and infrequent tasks

License

Notifications You must be signed in to change notification settings

grosser/serial_scheduler

Repository files navigation

Simple scheduler for long-running and infrequent tasks.

  • no threads, always in serial, to avoid out-of-memory issues and race-conditions
  • forks for each execution to avoid leaking memory
  • no dependencies
  • supports crons with timezones via fugit

Install

gem install serial_scheduler

Usage

require 'serial_scheduler'
scheduler = SerialScheduler.new

scheduler.add :foo, interval: 10, timeout: 2 do
  puts 'Doing foo'
end
scheduler.add :bar, interval: 5, timeout: 1 do
  puts 'Doing bar'
end

require 'fugit'
scheduler.add :bar, cron: "* * * * * America/New_York", timeout: 1 do
  puts 'Doing cron'
end

scheduler.run

Logging

SerialScheduler.new logger: my_logger

message: "Waiting to start job", job: :foo, in: 15, at: '2019-12-30 11:00:00'

Errors

Send to error service of your choice, or don't set it and it will raise and stop.

SerialScheduler.new error_handler: ->(e) { puts e }

Stopping

Will not start any new task, but finish the current one.

scheduler.stop

Author

Michael Grosser
[email protected]
License: MIT
Build Status

About

Simple scheduler for long-running and infrequent tasks

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages