Crontab Format
Let's see valid format and values of a cron job:
│ ┌───── hour (0 - 23)
│ │ ┌───── day of month (1 - 31)
│ │ │ ┌───── month (1 - 12)
│ │ │ │ ┌───── day of week (0 - 6)
│ │ │ │ │
* * * * * <command to be executed>
The first 5 fields delimited by white spaces are all for time format, 6th and thereafter are the commands that you want to execute.
That is to say, if you were using over 5 fields, say 6 fields to schedule the time for your job to execute, it could cause problem.
In Linux, number 0 or 7 can be used to represent Sunday in the weekday field, but not in UNIX-based OS.
Let's see some examples for a cron job.
Minutely
For example, if you want a job executed every minute, it should be:
[oracle@test ~]$ crontab -e
* * * * * /home/oracle/minutely.sh > /dev/null 2>&1
...
crontab: installing new crontab
There can't be no more 5 wild cards in the crontab. In the real world, this example might be a very rare case of being executing every minute.
The cron job is the same as the following one:
0-59 * * * * /home/oracle/minutely.sh > /dev/null 2>&1
But it is not the same as the following one:
0,59 * * * * /home/oracle/minutely.sh > /dev/null 2>&1
The job means that it will be executed only at minute 0 and 59 of every hour.
The is because a hyphen indicates a range of items, whereas a comma means a separated item.
Hourly
For executing scripts every hour, you need to specify the minute field. For example:
[oracle@test ~]$ crontab -e
20 * * * * /home/oracle/hourly.sh > /dev/null 2>&1
...
crontab: installing new crontab
This cron job will be executed at 20 minutes past every hour. There’re 4 wild cards in the list.
Daily
If you'd like to execute a job everyday, you should specify both minute and hour fields. For example, 04:20 AM everyday, you may set a cron job like this one:
[oracle@test ~]$ crontab -e
20 4 * * * /home/oracle/daily.sh > /dev/null 2>&1
...
crontab: installing new crontab
There're 3 wild cards in the list.
Weekly
A weekly job takes three fields: minute + hour + weekday :
[oracle@test ~]$ crontab -e
20 4 * * 6 /home/oracle/weekly.sh > /dev/null 2>&1
...
crontab: installing new crontab
This job will be executed at 04:20 AM on Saturday. There're only 2 wild cards left in the list.
Yearly
A yearly job takes four fields: minute + hour + month day + month :
[oracle@test ~]$ crontab -e
20 4 11 3 * /home/oracle/yearly.sh > /dev/null 2>&1
...
crontab: installing new crontab
This job will be executed at 04:20 AM on 11th of Mar every year. There're only 1 wild card left in the list.
Let's see a more advanced example:
Minutely in Specific Hour
Don't mistaken the following cron job. It's syntactically correct and it will be executed every minute in 4 o'clock everyday:
[oracle@test ~]$ crontab -e
* 4 * * * /home/oracle/daily.sh > /dev/null 2>&1
...
crontab: installing new crontab
Do you have more complicated examples? Please leave yours in the commend.