What is cron?
Cron is a daemon/service that executes shell commands periodically on a given schedule. Cron is driven by a crontab, a configuration file that holds details of what commands are to be run along with a timetable of when to run them.
Creating a crontab file
You can create a crontab file by entering the following terminal command:
crontab -e
Entering the above command will open a terminal editor [Ubuntu uses Nano by default] with a new blank crontab file [or it will open an existing crontab if you already have one.] You can now enter the commands to be executed [see syntax below] before saving the file and exiting the editor. As long as your entries were entered correctly your commands should now be executed at the times/dates you specified. You can see a list of active crontab entries by entering the following terminal command:
crontab -l
Crontab syntax
A crontab file has six fields for specifying minute, hour, day of month, month, day of week and the command to be run at that interval. See below:
* * * * * command to be executed - - - - - | | | | | | | | | +----- day of week (0 - 6) (Sunday=0) | | | +------- month (1 - 12) | | +--------- day of month (1 - 31) | +----------- hour (0 - 23) +------------- min (0 - 59)
Crontab examples
Writing a crontab file can be a somewhat confusing for first time users [and the above table probably doesn't help much!] Therefore I’ve listed below some crontab examples:
* * * * * <command> #Runs every minute 30 * * * * <command> #Runs at 30 minutes past the hour 45 6 * * * <command> #Runs at 6:45 am every day 45 18 * * * <command> #Runs at 6:45 pm every day 00 1 * * 0 <command> #Runs at 1:00 am every Sunday 00 1 * * 7 <command> #Runs at 1:00 am every Sunday 00 1 * * Sun <command> #Runs at 1:00 am every Sunday 30 8 1 * * <command> #Runs at 8:30 am on the first day of every month 00 0-23/2 02 07 * <command> #Runs every other hour on the 2nd of July
As well as the above there are also special strings that can be used:
@reboot <command> #Runs at boot @yearly <command> #Runs once a year [0 0 1 1 *] @annually <command> #Runs once a year [0 0 1 1 *] @monthly <command> #Runs once a month [0 0 1 * *] @weekly <command> #Runs once a week [0 0 * * 0] @daily <command> #Runs once a day [0 0 * * *] @midnight <command> #Runs once a day [0 0 * * *] @hourly <command> #Runs once an hour [0 * * * *]
Multiple commands
A double-ampersand “&&” can be used to run multiple commands consecutively. The following example would run command_01and then command_02 once a day:
@daily <command_01> && <command_02>
Disabling email notifications
By default a cron job will send an email to the user account executing the cronjob. If this is not needed put the following command at the end of the cron job line:
>/dev/null 2>&1
Specifying a crontab file to use
As mentioned at the top of this post, you can create a new crontab file with the “crontab -e” command. However, you may already have a crontab file, if you do you can set it to be used with the following command:
crontab -u <username> <crontab file>
Therefore the following command…
crontab -u tux ~/crontab
…would set Tux’s crontab file to that of the file named “crontab” residing in Tux’s home directory.
Removing a crontab file
To remove your crontab file simply enter the following terminal command:
crontab -r
Further information
Refer to the man page for further information about crontab. Enter the terminal command:
man crontab
External links
Some external links for your browsing pleasure:
- Cron article on Wikipedia
- Ubuntu Documentation – CronHowto
- Debian Help – Scheduling Backup Jobs using at and crontab in debian
- Matt Cutts – How to fetch a url with curl or wget silently
- Sitepoint – Getting PHP and Cron to Work Together
I think that pretty much covers the subject of cron jobs and crontab. Please feel free to comment if I’ve missed anything/made any boobs.