How do I set up a Cron job?
Put a shell script in one of these folders: /etc/cron.daily
, /etc/cron.hourly
, /etc/cron.monthly
or /etc/cron.weekly
.
If these are not enough for you, you can add more specific tasks e.g. twice a month or every 5 minutes. Go to the terminal and type:
crontab -e
This will open your personal crontab (cron configuration file). The first line in that file explains it all! In every line you can define one command to run and its schedule, and the format is quite simple when you get the hang of it. The structure is:
minute hour day-of-month month day-of-week command
For all the numbers you can use lists, e.g. 5,34,55
in the minutes field will mean run at 5 past, 34 past, and 55 past whatever hour is defined.
You can also use intervals. They are defined like this: */20
. This example means every 20th, so in the minutes column it is equivalent to 0,20,40
.
So to run a command every Monday at 5:30 in the afternoon:
30 17 * * 1 /path/to/command
or every 15 minutes
*/15 * * * * /path/to/command
Note that the day-of-week goes from 0-6 where 0 is Sunday.
You can read more here.
If the job you want to run can be run with the same privileges as your user I recommend using a user crontab which you can edit by running EDITOR="gedit" crontab -e
(which will use gedit to edit the crontab file) or simply crontab -e
(which will use the default editor) in a terminal.
If you want to run something every 10 minutes, for example, you add a line like this
*/10 * * * * /usr/bin/somedirectory/somecommand
and save the file.
You can see the contents of the user crontab with crontab -l
.
To add a cron job that runs as root, you can edit root's crontab by running sudo crontab -e
.
The most flexible way is to use the system crontab /etc/crontab
which you can edit only with root privileges. In this file, the user each command is to be run as is specified, so you can run your commands as root (in case you need that level of privilege) or any other user on the system.
For example, if you want to run something every 10 minutes as root, you'd add a line like this
*/10 * * * * root /usr/bin/somedirectory/somecommand
(notice the addition of the user to the line)
You can see the contents of the system crontab file with cat /etc/crontab
.
More details at: https://help.ubuntu.com/community/CronHowto
If you prefer to do it using a GUI, you can go to the Software Center and install Scheduled tasks (or run sudo apt-get install gnome-schedule
). It will provide a powerful GUI to add cron tasks.
Note that if you use this method, tasks by default will be executed as your own user, not as root. This is usually a good thing.