Kris Jordan

Kris Jordan

  • Mission
  • Students
  • Teaching
  • Thoughts

›Recent Posts

Recent Posts

  • OBS for On-line Teaching and Instructional Videos
  • New Website
  • Code Sketch - Paper Trail
  • Encryption with RSA Key Pairs
  • Log Indexing and Analysis with Logstash and Kibana

Timesaving crontab Tips

November 4, 2013

Kris Jordan

Setting up a crontab for running scripts on a schedule can be frustrating to debug. Usually, it boils down to cron's environment being different than your user's (i.e. PATH issues).

Always Setup crontab "Variables"

Your crontab file is not a shell script, but it has a few special variables that you can setup the same way you would a shell script. Set these special variables up in every crontab file you work with. Future you will thank you for it.

MAILTO="a@b.com,b@b.com"

When your cron jobs have output, or, more importantly, when they fail, cron will send the output e-mail these addresses.

PATH="/usr/bin:/sbin:/bin"

Logged in to the user account whose crontab you're setting up, go ahead and echo $PATH and copy those contents into the PATH variable of your crontab. Remember, this isn't a real script file, so you can't implicitly append :$PATH.

After assigning PATH and MAILTO, setting up your crontab is much easier.

HOME="/path/to/app/root"

The HOME variable tells which directory cron should execute the crontab commands from. Often times you'll have a user/crontab per project. If so, set the HOME variable to your project's root directory to avoid long, absolute paths to scripts or from having to 'cd /path/to/app/root && ...' for each job.

SHELL="/bin/bash"

Set the default shell to execute your commands from with the SHELL command. Like PATH, a safe bet is making this the same as your user's shell. Logged in as that user, run echo $0 to get an absolute path to your shell.

Still Stumped? Dump Your Environment

It's easy to redirect cron's environment variables to a temporary file, as seen on Stack Overflow. Tweak the following to run from your crontab in the near future:

30 08 * * * env > /tmp/cronenv

Once it runs, cat /tmp/cronenv to see your crontab's environment variables. Alternatively, if you're getting cron error messages e-mailed to you after setting up MAILBOX above, look at the raw headers of the e-mail. E-mails from cron should set X-CRON-ENV headers with these environment variables, too.

Happy automating!

Recent Posts
  • Always Setup crontab "Variables"
    • MAILTO="a@b.com,b@b.com"
    • PATH="/usr/bin:/sbin:/bin"
    • HOME="/path/to/app/root"
    • SHELL="/bin/bash"
    • Still Stumped? Dump Your Environment
Kris Jordan
Kris Jordan
MissionStudentsTeachingThoughts
Connect
YouTubeTwitterInstagramLinkedInGitHub
Copyright © 2022 Kris Jordan