What is a Cron Job and how to write to the Crontab

By Dillon Smart · · · 0 Comments

The need to schedule tasks on a machine is common for any Software Developer, System Admin or IT professional, so it’s important to learn what a cron job is and how to write to the crontab.

What is CRON?

Cron is a daemon built-in to most Unix-like operating systems such as:

  • Unix
  • GNU/Linux
  • MacOS

Cron reads the crontab (cron tables) for predefined commands and scripts, named Cron Jobs.

By using a specific syntax, we can configure a cron job to schedule scripts or other commands to run automatically.

Cron Syntax

To be able to set up a cron job, we need to understand the basic elements that make up the syntax.

The basic syntax of a crontab line is as follows:

* * * * * python3 /path/to/file/my-script.py

This crontab entry would execute the python script my-script.py every minute.

Let’s break this crontab line apart to understand its elements.

Cron Job Time and Date

The first part of the line `* * * * * *` conists of the time/date to run the command.

In this case we have used an asterisk in each part of the definition, which means the cron will fire on each change of the value.

Going from left to right, where the minute definition is the first asterick, the time and date for cron jobs is as follows:

  • Minute (0, 59)
  • Hour (0, 23)
  • Day (1, 31)
  • Month (1, 12)
  • Weekday (0, 6)

By using an asterick for each element in the time/date definition, our cron will fire every minute.

From here on, I will refer to the definitions left to right, so the minute definition would be the second asterick.

Fire a cron job every hour

If we wanted our cron job to run every hour, we would use:

0 * * * * python3 /path/to/file/my-script.py

In plain English, this means on every hour, day, month and day of week change, at minute 0 fire the command.

If we wanted the cron job to be executed every hour on minute 30, we would change it to this:

30 * * * * python3 /path/to/file/my-script.py

Fire a cron job every day

To run a cron job every day, on the first minute of the first hour, we would write:

0 0 * * * python3 /path/to/file/my-script.py

To run a cron job every day at 01:30, we would write:

30 1 * * * python3 /path/to/file/my-script.py

Fire a cron job every Sunday at 11pm

To run a cron job on a specific day of the week at a specific time we would write:

0 23 * * 6 python3 /path/to/file/my-script.py

Check out Crontab.guru to play around and configure the correct time and date to schedule your cron jobs.

How to run a Cron Job every second?

Unfortunetly, cron does not support intervals of less than 1 minute. However, there are ways to overcome this limitation by ustilising sleep functions of programming languages.

For example, if we wanted a cron job to run every 30 seconds, we could create two identical crontab entries, where the only difference is one of them first “sleeps” for 30 seconds.

Here is an example of a shell script being executed by cron every 30 seconds.

* * * * * /path/to/script.sh
* * * * * (sleep 30; /path/to/script.sh)

Technically, cron executes both jobs at the exact same time, however, in the second crontab line the script is halted for 30 seconds.

Conclusion

Cron jobs are a fundemental way of scheduling tasks to run at specific dates and times. In this post we have learned how to schedule a task to run every minute, hour and day, as well as learning how to overcome the limitations of Crontab by running a cron job every 30 seconds.

LinuxMacOSUbuntu

0 Comment

Was this helpful? Leave a comment!

This site uses Akismet to reduce spam. Learn how your comment data is processed.

How to Upload and Download files to and from a Linux server over SSH

Updated 16th August 2022

Its common place to need to upload and download files to and from a remote Linux server. To upload and download files from a remote Linux server you can use the scp (secure copy) command. To download a file you can use: To upload a file you can use: scp /path/to/file/your/uploading username@ip-or-server-name:/path/to/location/to/upload/to Note: It is

The Ultimate guide to create Apache2 Virtual Hosts (2022)

Updated 16th August 2022

In this post, I will be creating Virtual Hosts for Apache2 on WSL2 (Windows Subsystem for Linux). Follow along with this Ultimate guide to create Apache2 Virtual Hosts. The steps in this tutorial can be carried over onto any environment running Apache2. What we’ll cover Creating the directory structure Creating a symbolic link in Ubuntu

WSL vs Dual Boot speed test

Updated 16th August 2022

In this experiment, I will be using WSL2 running Ubuntu 20.04 and Ubuntu 20.04 dual-booted on the same Dell XPS. Is there a noticeable difference? Follow along for the results of the WSL vs Dual Boot speed test. If you are like me and use different development environments a lot, you may find the results