Linux crontab will allow you to schedule a job execution at regular intervals in background. You can schedule any command/script to be executed, place it in the crontab of the linux system, so that it will automatically execute at the scheduled time and will mail you the details. In this article, we will go through the following sections:
• Crontab command usage.
• Scheduling a job in crontab.
• Example cron jobs.
• Special words to schedule job.
• Handling the cron output.
1. Crontab command usage.
a. Listing cron jobs.
The following command will list the scheduled cron jobs for the currently logged in user:
# crontab –l
If you have logged in as root, it will show the cron jobs set under root user. If you want to display the cron jobs set under another user, you have to use the following command:
# crontab –l –u username
b. Editing cron jobs.
You can add or edit the cron jobs for the currently logged in user as follows:
# crontab –e
This will open a file where we can add/modify the cron job. The file is actually located in “/var/spool/cron/username”. The command “crontab –e” will work like opening and editing the file in “vi” editor.
If you want to modify the cron job of another user, you need to use the command:
# crontab –e –u username
c. Removing the cron jobs.
If you want to remove the cron jobs of currently logged in user, execute the following command:
# crontab –r
This will remove all the cron jobs without asking for confirmation. If you want to delete interactively, you need to use the following command:
# crontab –ir
If you want to remove the cron jobs of another user, execute it as:
# crontab –ir –u username
d. Load cron jobs from a file.
If you have a file with all scheduled cron jobs, you can execute the following command to load those jobs into crontab.
# crontab –u username cronfile.txt
This will load the jobs from the file cronfile.txt.
2. Scheduling a job in crontab.
The syntax of a crontab entry is as follows:
Minute Hour DOM Month DOW Command_to_be_Executed
Minute => In which minute the job to be executed.
Hour => In which Hour the job need to be executed.
DOM => The Day Of Month in which the job need to be executed
Month => In which month the job need to be executed
DOW => The Day of Week in which the job need to be executed.
We will go through some examples which will make this clear.
3. Cron job scheduling examples.
Example 1: Schedule a cron job to run on May 23 10.30 am.
This can be done with the following:
30 10 23 05 * sh /root/sh
30 => 30th minute
10 => 10th hour
23 => 23rd day of month
06 => June
* => Every day of week
Example 2: Schedule a job to run in every minute.
* * * * * sh /root/test.sh
Where * = every minute
*= every hour
*= every day
*= every day month
* = every day of week
Example 3: Schedule a cron job to run in every 10 minutes.
This can be set in two ways.
0,10,20,30,40,50 * * * * sh /root/test.sh
The same can be accomplished with the following:
*/10 * * * * sh /root/test.sh
Example 4: Schedule a cron job to run in every 5 minutes on Monday through Friday.
This can be accomplished with the following cron job
*/5 * * * 1-5 sh /root/test.sh
Here */5 refers to “every 5 minutes and “1-5” refers to Monday through Friday.
(0-6 = Sunday-Saturday)
Example 5: Schedule a cron job to run at “3.00 pm” on every Thursday.
00 15 * * 4 sh /root/test.sh
Here “00 15” refers to 3.00 pm and “4” refers to “Thursday”.
4. Special words usage in crontab.
We will be able to use some special words in crontab to denote some specific time. The following table shows such special words and its meaning.
@reboot Run once, at startup
@yearly Run once in a year, similar to "0 0 1 1 *"
@monthly Run once in a month, similar to "0 0 1 * *"
@weekly Run once in a week, similar to "0 0 * * 0"
@daily Run once in a day, similar to "0 0 * * *"
@hourly Run once in an hour, similar to "0 * * * *”
For example, you can schedule a job to run at 12 am everyday as follows:
@daily sh /root/test.sh
5. Handling the cron output.
a. Sending report to a mail address.
You can setup a mail address on which you want to receive the notifications of executed cron jobs as follows:
b. If you want to disable sending output mail, you can set it as follows.
* * * * * sh /root/test.sh > /dev/null 2>&1
where 2 refers to “STDERR” (errors) and 1 refers to STDOUT (standard output). So “2>&1” will make both errors and output to be created in one data stream. Hence, the datastream (both errors and output) will be sent to /dev/null a special device file which will discard all data written to it without notification.
c. If you want to discard output mails but require mail to be sent in case of errors, it need to be set as follows.
* * * * * sh /root/test.sh > /dev/null