Output redirection aka logging your cron jobs

Anton Rieder edited this page Aug 17, 2017 · 8 revisions
In your schedule.rb file you can specify the redirection options for your commands at a global or command level by setting the 'output' variable. This example is global level:
  # adds ">> /path/to/file.log 2>&1" to all commands
  set :output, '/path/to/file.log'

and you should put this global level set :output above your job definition, otherwise it wouldn't work
Example:

# This works
set :output, {:error => '~/Desktop/z.error.log', :standard => '~/Desktop/z.standard.log'}

every 1.minute do
  command "python ~/Desktop/whe/config/z.py"
end
every 1.minute do
  command "python ~/Desktop/whe/config/z.py"
end

# This won't work
set :output, {:error => '~/Desktop/z.error.log', :standard => '~/Desktop/z.standard.log'}

Rails.root and RAILS_ROOT will be unavailable, however Whenever.path (or just path) will deliver the Rails root path in most cases. Alternatively, if you want to access environment or application config values, simply add

# makes Rails.root as well as other environment specific Rails.application.config values available
require File.expand_path(File.dirname(__FILE__) + "/environment")

Or you can STDOUT and STDERR separately,

  # adds ">> cron.log 2> error.log" to all commands
  set :output, {:error => 'error.log', :standard => 'cron.log'}

  # adds ">> cron.log" to all commands
  set :output, {:standard => 'cron.log'}

  # adds "2> error.log" to all commands
  set :output, {:error => 'error.log'}

Additionally you can set these values at the command level,

  every 3.hours do
    runner "MyModel.some_process", :output => 'cron.log'     
    rake "my:rake:task", :output => {:error => 'error.log', :standard => 'cron.log'}
    command "/usr/bin/cmd"
  end  

If you need to pipe output into a command, e.g. syslog (logger), use a lambda:

set :output, lambda { "2>&1 | logger -t whenever_cron" }

In all cases you can if you explicitly set the value of any output to 'nil' it will add a redirect to /dev/null

  # adds ">> /dev/null 2>&1" to all commands
  set :output, nil
  set :output, {:error => nil, :standard => nil}

  # adds ">> /dev/null" to all commands
  set :output, {:standard => nil}

  # adds "2> /dev/null" to all commands
  set :output, {:error => nil}

NB: In Rails, the :output to get the files into the log directory is log/name_of_log.log (?)

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.