Oct 19, 2023 6 min read

Scheduling Cron Jobs with Crontab

Scheduling Cron Jobs with Crontab with our step-by-step tutorials. Cron is a task scheduler that runs tasks at regular intervals.

Scheduling Cron Jobs with Crontab
Table of Contents

Introduction

Before we begin talking about Scheduling Cron Jobs with Crontab, let's briefly understand – What is Cron?

Cron is a task scheduler that runs tasks at regular intervals. Cron jobs are a type of task that is used to automate system maintenance and management.

You could use a cron job to automate things like backing up databases or data, upgrading the system with the latest security patches, checking disc space consumption, and sending emails, for example.

Cron tasks can be set to run every minute, hour, day of the month, month, weekday, or any combination of these.

In this tutorial, you will schedule Cron Jobs with Crontab. We will also address a few FAQs on Scheduling Cron Jobs with Crontab.

What is Crontab File

Crontab (cron table) is a text file that describes the cron task schedule. Crontab files are divided into two categories. Individual user crontab files and system-wide crontab files.

Users' crontab files are called after their names, and their locations vary depending on the operating system. Crontab files are saved in the /var/spool/cron directory in Red Hat based distributions like CentOS, and in the /var/spool/cron/crontabs directory in Debian and Ubuntu.

Although you can manually edit the user crontab files, using the crontab command is preferred.

System-wide crontab files, such as the /etc/crontab file and the scripts in the /etc/cron.d directory, can only be modified by system administrators.

Scripts can also be placed in the /etc/cron. {hourly,daily,weekly,monthly} directories in most Linux distributions, and they will be executed every hour, day, week, and month.

Operators and Syntax of Crontab

In the user crontab file, each line has six fields separated by a space, followed by the command to be executed.

* * * * * command(s)
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

One or more values separated by a comma or a range of values separated by a hyphen may be entered in the first five fields.

  • * - The asterisk operator can be used to represent any value or always. The asterisk symbol in the Hour box indicates that the task will be done every hour.
  • , - You can give a list of values for repetition using the comma operator. If you enter 1,3,5 in the Hour field, the job will run at 1 a.m., 3 a.m., and 5 a.m., respectively.
  • - You can provide a range of values with the hyphen operator. The job will execute every weekday if you enter 1-5 in the Day of Week field (From Monday to Friday).
  • / - The slash operator lets you specify values that will be repeated after a certain amount of time has passed. If you put */4 in the Hour field, for example, the action will be executed every four hours. Same as specifying 0,4,8,12,16,20. You can use a range of numbers instead of an asterisk before the slash operator; for example, 1-30/10 is the same as 1,11,21.

System-wide Crontab Files

System-wide crontab files have a somewhat different syntax than user crontabs. It also includes a necessary user field that identifies the user who will run the cron job.

* * * * * <username> command(s)

Predefined Macros

To indicate common intervals, there are various special Cron schedule macros. These shortcuts can be used instead of the five-column date specification.

  • @yearly (or @annually) - Perform the given task once a year at 12:00 a.m. on January 1st same as 0 0 1 1 *.
  • @monthly - Run the specified job once a month, at midnight on the first day of the month. Same as 0 0 1 * *.
  • @weekly - Run the specified task once a week, at midnight on Sunday. Same as 0 0 * * 0.
  • @daily - Run the given task once a day at midnight. Same as 0 0 * * *.
  • @hourly - Run the given task once an hour, at the start of the hour. Same as 0 * * * *.
  • @reboot - Run the given task at system startup (boot-time).

Linux Crontab Command

You can use the crontab command to install, inspect, or edit a crontab file:

  • crontab -e - Edit or create a crontab file if one does not already exist.
  • crontab -l - Shows the contents of the crontab file.
  • crontab -r - Remove your current crontab file.
  • crontab -i - Delete your current crontab file, prompting you before doing so.
  • crontab -u <username> - Edit the crontab file for another user. This method necessitates system administrator access.

The crontab command uses the editor given by the VISUAL or EDITOR environment variables to access the crontab file.

Crontab Variables

Several environment variables are automatically set by the cron daemon.

  • PATH=/usr/bin:/bin is set as the default path. You can either use the absolute path to the command or alter the cron $PATH variable if the command you're running isn't in the cron-specified path. As you would with an ordinary script, you can't implicitly append:$PATH.
  • /bin/sh is set as the default shell. Use the SHELL variable to switch between shells.
  • Cron uses the user's home directory to run the command. In the crontab, the HOME variable can be set.
  • The owner of the crontab receives an email notification. You can use the MAILTO environment variable with a list (comma separated) of all the email addresses you wish to receive email notifications to override the default behavior. No mail is sent when MAILTO is defined but empty (MAILTO="").

Crontab Restrictions

You may manage which users have access to the crontab command using the /etc/cron.deny and /etc/cron.allow files. The files are made up of a list of usernames, one per line.

Only the /etc/cron.deny file exists by default, and it is empty, allowing all users to use the crontab command. Add the username to this file if you wish to deny a certain user access to the crontab commands.

Only the users named in the /etc/cron.allow file can use the crontab command if it exists.

Only users with administrative access can use the crontab command if none of the files exist.

Cron Jobs Examples

Here are several cron job examples that demonstrate how to plan a task to execute at various times.

  • Every Monday through Friday at 15:00, run the following command:
0 15 * * 1-5 command
  • Every 5 minutes, run a script that redirects standard output to dev null, with only the standard error being delivered to the supplied e-mail address:
[email protected]
*/5 * * * * /path/to/script.sh > /dev/null
  • Every Monday at 3 p.m., run the following two commands (using the operator && between the commands):
0 15 * * Mon command1 && command2
  • Every two minutes, run a PHP script and save the results to a file:
*/2 * * * * /usr/bin/php /path/to/script.php >> /var/log/script.log
  • Every day, on the hour, from 8 a.m. to 4 p.m., run the following script:
00 08-16 * * * /path/to/script.sh
  • On the first Monday of each month, at 7 a.m., run a script.
0 7 1-7 * 1 /path/to/script.sh
  • On the 1st and 15th of each month, at 9:15 p.m., run the following script:
15 9 1,15 * * /path/to/script.sh
  • Set up custom HOME, PATH, SHELL, and MAILTO variables, then run a command once every minute.
HOME=/opt
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/usr/bin/zsh
[email protected]

*/1 * * * * command

FAQs on Scheduling Cron Jobs with Crontab

Can I schedule cron jobs to run at intervals other than fixed times? 

Yes, you can schedule cron jobs at intervals using the appropriate cron syntax. For example, */5 * * * * represents a cron expression to run a job every 5 minutes.

How do I specify the command to run in a cron job? 

Specify the command to run in a cron job by adding it after the cron schedule. For example, 0 2 * * * /path/to/script.sh will execute the script.sh file at 2 AM every day.

How can I list all the scheduled cron jobs? 

To list all scheduled cron jobs, use the command: crontab -l. This will display the currently configured cron jobs for the current user.

How can I edit an existing cron job? 

To edit an existing cron job, open the crontab editor using crontab -e, make the necessary modifications, and save the file.

How can I remove a cron job? 

To remove a cron job, open the crontab editor using crontab -e, delete the corresponding line containing the job, and save the file.

Can I redirect the output of a cron job to a file? 

Yes, you can redirect the output of a cron job to a file by appending > /path/to/output.log 2>&1 at the end of the job's command. This will capture both standard output and error output.

How can I view the system-wide cron jobs? 

To view the system-wide cron jobs (root's crontab), use the command: sudo crontab -e. This allows you to configure and manage cron jobs that affect the entire system.

Conclusion

Cron is a daemon that lets you schedule tasks for a future date and time.

If you have any queries, please leave a comment below and we’ll be happy to respond to them.

Great! You’ve successfully signed up.
Welcome back! You've successfully signed in.
You've successfully subscribed to DevOps Blog - VegaStack.
Your link has expired.
Success! Check your email for magic link to sign-in.
Success! Your billing info has been updated.
Your billing was not updated.