David Walsh Blog

How to Create and Manage CRON Jobs

Interval or scheduled task execution is used all over computer science, the most obvious use case being transaction batching.  For web developers like myself, the most obvious use case is executing CRON jobs for this blog, including polling for scheduled blog post publishing and a variety of other tasks.  I also use crontab on my local machine to update remote git repositories before I get into work each morning so that I’m always working from the most updated code.  Let’s take a brief look at how to use crontab to create and manage CRON jobs!

To create, edit, or delete CRON jobs, you’ll use the crontab command.  You can view and edit existing tasks, as well as create new tasks, with the following command:

crontab -e

The preceding command will show you a screen with existing CRON tasks if they exist:


# Example
01 * * * * /path/to/script-to-run.sh

The format for task scheduling is:


# * * * * * /path/to/script-to-run.sh
(minute) (hour) (day of month) (month of year) (day of week) (script)

I recommend creating a single executable file for each task — it keeps complex logic outside of the crontab edit interface and avoid re-installation when editing within crontab.

You can also set your crontab tasks to execute every {x} {units of time}.  For example, you can specify that a task run every 30th minute of the hour with:


# Runs on the 30th minute of each hour
30 * * * * /path/to/script-to-run.sh

You can use the */{interval} format to run a CRON task at fractional intervals:


# Runs a task every 10 minutes
*/10 * * * * /path/to/script-to-run.sh

# Runs a task every 2 hours
0 */2 * * * /path/to/script-to-run.sh

You can also select exact values with commas:


# Run task on weekdays only
* * * * mon,tue,wed,thu,fri /path/to/script-to-run.sh

To delete or remove a CRON task, simply remove the line from the crontab interface.  One of the beauties of crontab is that the entirety of it refreshes when tasks are updated.

Executing tasks automatically based on time is an incredibly useful capability.  I had always thought of CRON as a website capability but having the functionality locally is also incredibly useful.