Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

whenever_systemd

Package Overview
Dependencies
Maintainers
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

whenever_systemd

  • 0.0.2
  • Rubygems
  • Socket score

Version published
Maintainers
2
Created
Source

WheneverSystemd is a fork of the gem Whenever, which generates & installs systemd timers from a similar schedule.rb file.

Note: By some reasons there is no tests yet, if you want to add them, you are welcome.

Installation

$ gem install whenever_systemd

Or with Bundler in your Gemfile.

gem 'whenever_systemd', require: false

Getting started

$ cd /apps/my-great-project
$ bundle exec wheneverize .

This will create an initial config/schedule.rb file for you (as long as the config folder is already present in your project).

The whenever_systemd command

The whenever_systemd command will simply show you your schedule.rb file converted to cron syntax. It does not read or write your systemd units.

$ cd /apps/my-great-project
$ bundle exec whenever_systemd

To write unit files for your jobs, execute this command:

$ whenever_systemd --update-units

Other commonly used options include:

$ whenever_systemd --load-file config/my_schedule.rb # set the schedule file
$ whenever_systemd --install-path '/usr/lib/systemd/system/' # install units to specific dir

Example schedule.rb file

Note the difference with whenever schedule.rb:

You should provide a name to your job in the first argument, i.e.:

# instead of:
runner "MyModel.some_process"

# With whenever_systemd:
runner "mymodel-some_process", "MyModel.some_process"

So, here is an example:

set :prefix,        "myproject"
set :timer,          { accuracy_sec: "1m" } # timer options
set :install,        { wanted_by: "timers.target" } # project timers target

every 3.hours do # 1.minute 1.day 1.week 1.month 1.year is also supported
  runner  "mymodel-some_process", "MyModel.some_process"
  rake    "myrake-task", "my:rake:task"
  command "my_great_command", "/usr/bin/my_great_command"
end

# Helpers: minutely, hourly, daily, monthly, yearly, quarterly, semiannually
# See: https://www.freedesktop.org/software/systemd/man/systemd.time.html#Calendar%20Events
minutely do
  runner "SomeModel.ladeeda"
end

# +every+ helper eats any calendar syntax described in the link above:
every '*:1/15' do # Every 15 minutes, starting from 01, i.e.: 01,16,31,46
  runner "mymode-task_to_run_in_15m", "Mymodel.task_to_run_in_15m"
end

# Folded blocks:
daily do
  at '00:00' do # run every day at 00:00
    runner "task-do_something_great", "Task.do_something_great"
    rake "app_server-task", "app_server:task"
  end
end

weekly 'Sun' do
  at '4:30' do # Run every Sunday at 04:30
    runner "mymodel-sunday_task", "Mymodel.sunday_task"
  end
end

Define your own job types

Whenever ships with three pre-defined job types: command, runner, and rake. You can define your own with job_type.

For example:

job_type :awesome, '/usr/local/bin/awesome :task :fun_level'

every 2.hours do
  awesome "awesome-party", "party", fun_level: "extreme"
end

Would run /usr/local/bin/awesome party extreme every two hours. :task is always replaced with the first argument, and any additional :whatevers are replaced with the options passed in or by variables that have been defined with set.

The default job types that ship with Whenever are defined like so:

job_type :command, ":task :output"
job_type :rake,    "cd :path && :environment_variable=:environment bundle exec rake :task --silent :output"
job_type :runner,  "cd :path && bin/rails runner -e :environment ':task' :output"
job_type :script,  "cd :path && :environment_variable=:environment bundle exec script/:task :output"

If a :path is not set it will default to the directory in which whenever was executed. :environment_variable will default to 'RAILS_ENV'. :environment will default to 'production'. :output will be replaced with your output redirection settings which you can read more about here: http://github.com/javan/whenever/wiki/Output-redirection-aka-logging-your-cron-jobs

All jobs are by default run with bash -l -c 'command...'. Among other things, this allows your cron jobs to play nice with RVM by loading the entire environment instead of cron's somewhat limited environment. Read more: http://blog.scoutapp.com/articles/2010/09/07/rvm-and-cron-in-production

You can change this by setting your own :job_template.

set :job_template, "bash -l -c ':job'"

Or set the job_template to nil to have your jobs execute normally.

set :job_template, nil

Credit

WheneverSystemd is forked from Whenever not by a glory seeker, so I just copy the original credits:

Whenever was created for use at Inkling (http://inklingmarkets.com). Their take on it: http://blog.inklingmarkets.com/2009/02/whenever-easy-way-to-do-cron-jobs-from.html

Thanks to all the contributors who have made it even better: http://github.com/javan/whenever/contributors

Copyright © 2017 Javan Makhmali

FAQs

Package last updated on 14 Feb 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc