Scheduling Cron Jobs with Crontab
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 enter1,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 enter1-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 specifying0,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 as1,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 as0 0 1 1 *
.@monthly
- Run the specified job once a month, at midnight on the first day of the month. Same as0 0 1 * *
.@weekly
- Run the specified task once a week, at midnight on Sunday. Same as0 0 * * 0
.@daily
- Run the given task once a day at midnight. Same as0 0 * * *
.@hourly
- Run the given task once an hour, at the start of the hour. Same as0 * * * *
.@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 implicitlyappend:$PATH
./bin/sh
is set as the default shell. Use theSHELL
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 whenMAILTO
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:
MAILTO=email@example.com
*/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
, andMAILTO
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
MAILTO=email@example.com
*/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.