Syntax ¶
Linux crontab has six fields. 1-5 fields defines the date and time of execution. The 6’th fields are used for command or script to be executed.The Linux crontab syntax are as following:
[Minute] [hour] [Day_of_the_Month] [Month_of_the_Year] [Day_of_the_Week] [command]
- Astrics (*) – Matches anything
- Define range – You can define range using the hypen like: 1-10 or 20-30 or sun-fri or feb-apr
- Define multiple range – You can define multiple ranges with command seprated like: jan-mar,jul-sep
How to Add/Edit Crontab ¶
To add or update job in crontab, use below command. It will open crontab file in the editor where a job can be added/updated.
crontab -e
By default, it will edit crontab entries of current logged in user. To edit other user crontab use command:
crontab -u username -e
To view crontab entries of current user:
crontab -l
Use -u followed by username to view crontab entries of the specified user.
crontab -u username -l
20 Useful Crontab Examples ¶
1. Schedule a cron to execute at 2am daily. ¶
0 2 * * * /bin/sh script.sh
2. Schedule a cron to execute twice a day. ¶
Below example command will execute at 5 AM and 5 PM daily. You can specify multiple time stamp by comma separated.
0 5,17 * * * /scripts/script.sh
3. Schedule a cron to execute on every minutes. ¶
Generally, we don’t require any script to execute on every minute but in some case, you may need to configure it.
* * * * * /scripts/script.sh
4. Schedule a cron to execute on every Sunday at 5 PM. ¶
0 17 * * sun /scripts/script.sh
5. Schedule a cron to execute on every 10 minutes. ¶
*/10 * * * * /scripts/monitor.sh
6. Schedule a cron to execute on selected months. ¶
* * * jan,may,aug * /script/script.sh
7. Schedule a cron to execute on selected days. ¶
0 17 * * sun,fri /script/script.sh
8. Schedule a cron to execute on first sunday of every month. ¶
To schedule a script to execute a script on first Sunday only is not possible by time parameter, But we can use the condition in command fields to do it.
0 2 * * sun [ $(date +%d) -le 07 ] && /script/script.sh
9. Schedule a cron to execute on every four hours. ¶
0 */4 * * * /scripts/script.sh
10. Schedule a cron to execute twice on every Sunday and Monday. ¶
To schedule a task to execute twice on Sunday and Monday only.
0 4,17 * * sun,mon /scripts/script.sh
11. Schedule a cron to execute on every 30 Seconds. ¶
To schedule a task to execute on every 30 seconds is not possible by time parameters, But it can be done by schedule same cron twice like below.
* * * * * /scripts/script.sh
* * * * * sleep 30; /scripts/script.sh
12. Schedule a multiple tasks in single cron. ¶
To configure multiple tasks with single cron, Can be done by separating tasks by the semicolon ( ; ).
* * * * * /scripts/script.sh; /scripts/scrit2.sh
13. Schedule tasks to execute on yearly ( @yearly ). ¶
@yearly timestamp is similar to “0 0 1 1 *”. It will execute task on the first minute of every year.
@yearly /scripts/script.sh
14. Schedule tasks to execute on monthly ( @monthly ). ¶
@monthly timestamp is similar to “0 0 1 * *”. It will execute a task in the first minute of the month.
@monthly /scripts/script.sh
15. Schedule tasks to execute on Weekly ( @weekly ). ¶
@weekly timestamp is similar to “0 0 1 * mon”. It will execute a task in the first minute of the week.
@weekly /bin/script.sh
16. Schedule tasks to execute on daily ( @daily ). ¶
@daily timestamp is similar to “0 0 * * *”. It will execute a task in the first minute of every day.
@daily /scripts/script.sh
17. Schedule tasks to execute on hourly ( @hourly ). ¶
@hourly timestamp is similar to “0 * * * *”. It will execute a task in the first minute of every hour.
@hourly /scripts/script.sh
18. Schedule tasks to execute on system reboot ( @reboot ). ¶
@reboot is useful for those tasks which you want to run on your system startup. It will be same as system startup scripts.
@reboot /scripts/script.sh
19. Redirect Cron Results to specified email account. ¶
By default, cron sends details to the current user where cron is scheduled. If you want to redirect it to your other account, can be done by setup MAIL variable like below
# crontab -l
MAIL=bob
0 2 * * * /script/backup.sh
20. Taking backup of all crons to plain text file. ¶
I recommend keeping a backup of all jobs entry in a file. This will help you to recover crons in case of accidental deletion.
Check current scheduled cron:
# crontab -l
MAIL=rahul
0 2 * * * /script/backup.sh
Backup cron to text file:
# crontab -l > cron-backup.txt
# cat cron-backup.txt
MAIL=rahul
0 2 * * * /script/backup.sh
Removing current scheduled cron:
# crontab -r
# crontab -l
no crontab for root
Restore crons from text file:
# crontab cron-backup.txt
# crontab -l
MAIL=rahul
0 2 * * * /script/backup.sh