Using Dead Man's Snitch with Whenever
A quick tip to make it easier to use Dead Man's Snitch with the whenever gem
Whenever includes a number of predefined job types which can be overridden to include snitch support.
job_type command allows you to register a job type. It takes a name and a string representing the command. Within the command string, anything that begins with
: is replaced with the value from the jobs options hash. Sounds complicated but is in fact quite easy.
whenever gem in your Gemfile and then run
$ bundle exec wheneverize
This will create a file,
config/schedule.rb. Insert these lines at the top of your config file, I have mine just below
These lines add
&& curl https://nosnch.in/:snitch to each job type just before
job_type :command, "cd :path && :task && curl https://nosnch.in/:snitch :output" job_type :rake, "cd :path && :environment_variable=:environment bin/rake :task --silent && curl https://nosnch.in/:snitch :output" job_type :runner, "cd :path && bin/rails runner -e :environment ':task' && curl https://nosnch.in/:snitch :output" job_type :script, "cd :path && :environment_variable=:environment bundle exec script/:task && curl https://nosnch.in/:snitch :output"
Now add your job to the schedule. A simple rake task would like this:
every 1.day, roles: [:app] do rake "log:clear" end
Now it’s time to create the snitch. You can grab a free account at deadmanssnitch.com and add a new snitch.
Then, once that’s saved, you’ll see a screen with your snitch URL. All you need to do is copy the hex code at the end.
Use that hex code in your whenever job as follows:
every 1.day, roles: [:app] do rake "log:clear", snitch: "06ebef375f" end
Now deploy and update your whenverized cron job. DMS will let you know as soon as your job runs for the first time so you know it has begun to work. After that, they’ll only let you know if it fails to check in.
Tip: For best tracking, you want your DMS job to check in just before the end of the period you’re monitoring (in the above example 1 day). To do that, I revert to cron syntax in whenever and set my job up as:
# Assuming your server time zone is set to UTC every "59 23 * * *", roles: [:app] do rake "log:clear", snitch: "06ebef375f" end