Managing Scheduled Tasks with Cron

by Tim Case

Introduction to Cron

Cron is a time-based job scheduler in Unix-like operating systems that allows users to run scripts or commands at specified times or intervals. It is widely used for automating system maintenance, backups, monitoring, and other scheduled tasks.

Using Crontab: With and Without sudo

User Crontab (crontab -e)

System-wide Crontab (sudo crontab -e)

Monitoring Cron Jobs

Tracking cron jobs is crucial for ensuring they execute correctly. Here are some methods:

1. Logging Cron Jobs

By default, cron logs its activity in /var/log/syslog on many Linux distributions. You can check logs with:

grep CRON /var/log/syslog

2. Redirecting Output to a Log File

You can explicitly log cron job output by redirecting stdout and stderr:

* * * * * /path/to/script.sh >> /var/log/myscript.log 2>&1

3. Using cron.allow and cron.deny

To manage user access to cron, use:

Sending Crontab Errors to Your Mailbox

By default, cron sends job output to the local mailbox of the user running the job. To ensure you receive emails:

1. Set the MAILTO Variable

Add this to your crontab:

MAILTO="your_email@example.com"

2. Install and Configure Mail Utilities

Ensure postfix or mailutils is installed to send emails:

sudo apt install mailutils

3. Redirect Errors to Email

Modify your cron job like this:

* * * * * /path/to/script.sh 2>&1 | mail -s "Cron Job Error" your_email@example.com

Complementary Tools for Managing Cron Jobs

1. cronnext

Predicts the next run time of a cron job:

cronnext "0 5 * * *"

2. cronie

An alternative cron daemon with better logging and job tracking.

3. anacron

Handles jobs that were missed while the system was down.

4. systemd timers

A modern alternative to cron for scheduling tasks with better logging and dependency management:

systemctl list-timers

Conclusion

Cron is a powerful tool for scheduling tasks, but monitoring and error handling are crucial for reliability. By understanding user vs. root crontabs, logging output, and using complementary tools, you can ensure your cron jobs run smoothly and predictably.


Do you use cron in your daily workflow? Share your favorite cron tips in the comments!