[BACK] [Syntax] [Operators] [Special Strings] [Directories]
Q. How do I add cron job under Linux or UNIX like operating system?
A. Cron job are used to schedule commands to be executed periodically i.e. to setup commands which will repeatedly run at a set time, you can use the cron jobs.
crontab is the command used to install, deinstall or list the tables used to drive the cron daemon. Each user can have their own crontab, and though these are files in /var/spool/cron/crontabs, they are not intended to be edited directly. You need to use crontab command for editing or setting up your own cron jobs.
To edit your crontab file, type the following command:
$ crontab -e
Your cron job looks like as follows:
1 2 3 4 5 /path/to/command arg1 arg2
Where,
Same above five fields structure can be easily remembered with following diagram:
* * * * * command to be executed - - - - - | | | | | | | | | ----- Day of week (0 - 7) (Sunday=0 or 7) | | | ------- Month (1 - 12) | | --------- Day of month (1 - 31) | ----------- Hour (0 - 23) ------------- Minute (0 - 59)
Example(s)
If you wished to have a script named /root/backup.sh run every day at 3am, my crontab entry would look like as follows:
(a) Install your cronjob:# crontab -e
(b)Append following entry:0 3 * * * /root/backup.sh
Run five minutes after midnight, every day:5 0 * * * /path/to/command
Run at 2:15pm on the first of every month:15 14 1 * * /path/to/command
Run at 10 pm on weekdays (Mon - Fri): 0 22 * * 1-5 /path/to/command
Run 23 minutes after midnigbt, 2am, 4am ..., (every 2 hours) everyday:23 0-23/2 * * * /path/to/command
Run at 5 after 4 every sunday:5 4 * * sun /path/to/command
An operator allows you to specifying multiple values in a field. There are three operators:
By default the output of a command or a script (if any produced), will be email to your local email account. To stop receiving email output from crontab you need to append ">/dev/null 2>&1". For example:0 3 * * * /root/backup.sh >/dev/null 2>&1To mail output to particluer email account let us say vivek@nixcraft.in you need to define MAILTO variable to your cron job:MAILTO="vivek@nixcraft.in"
0 3 * * * /root/backup.sh >/dev/null 2>&1
Type the following command:# crontab -l
To remove or erase all crontab jobs use the command:# crontab -r
Display the last time you edited your crontab file. (Not on all systems.):# crontab -v
Instead of the first five fields, you can use any one of eight special strings. It will not just save your time but it will improve readability.
Run ntpdate every hour:
@hourly /path/to/ntpdate
Make a backup everyday:
@daily /path/to/backup/script.sh
/etc/crontab is system crontabs file. Usually only used by root user or daemons to configure system wide jobs. All individual user must must use crontab command to install and edit their jobs as described above. /var/spool/cron/ or /var/cron/tabs/ is directory for personal user crontab files. It must be backup with users home directory.
Typical /etc/crontab file entries:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
Additionally, cron reads the files in /etc/cron.d/ directory. Usually system daemon such as sa-update or sysstat places their cronjob here. As a root user or superuser you can use following directories to configure cronjobs. You can directly drop your scripts here. run-parts command run scripts or programs in a directory via /etc/crontab
| Directory | Description |
| /etc/cron.d/ | Put all scripts here and call them from /etc/crontab file. |
| /etc/cron.daily/ | Run all scripts once a day |
| /etc/cron.hourly/ | Run all scripts once an hour |
| /etc/cron.monthly/ | Run all scripts once a month |
| /etc/cron.weekly/ | Run all scripts once a week |
Here is a sample shell script (clean.cache) to clean up cached files every 10 days. This script is directly created at /etc/cron.daliy/ directory i.e. create a file called /etc/cron.daily/clean.cache:
#!/bin/bash CROOT="/tmp/cachelighttpd/" DAYS=10 LUSER="lighttpd" LGROUP="lighttpd" # start cleaning /usr/bin/find ${CROOT} -type f -mtime +${DAYS} | xargs -r /bin/rm # if directory deleted by some other script just get it back if [ ! -d $CROOT ] then /bin/mkdir -p $CROOT /bin/chown ${LUSER}:${LGROUP} ${CROOT} fi
You can execute crontab if your name appears in the file /usr/lib/cron/cron.allow. If that file does not exist, you can use
crontab if your name does not appear in the file /usr/lib/cron/cron.deny.
If only cron.deny exists and is empty, all users can use crontab. If neither file exists, only the root user can use crontab. The allow/deny files consist of one user name per line.
Original article at http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/