Cron Jobs
Cron
is one of the most useful tool in Linux or UNIX like operating systems.
The cron service (daemon) runs in the background and constantly checks
the /etc/crontab file, /etc/cron.*/ directories. It also checks the
/var/spool/cron/ directory.
- Create your own shell script/repetitive job (backup script etc...)
- Install / Create / Edit Own Cronjobs
To edit your crontab file, type the following command at the UNIX / Linux shell prompt:$ crontab –e
Now add the your cron job to this file like below
* * * * * /u01/my.sh ( command to be executed )
Where,
- 1: Minute (0-59)
- 2: Hours (0-23)
- 3: Day (0-31)
- 4: Month (0-12 [12 == December])
- 5: Day of the week(0-7 [7 or 0 == sunday])
- /path/to/command - Script or command name to schedule
Easy to remember format:
* * * * * 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)
More Examples
To run /path/to/command five minutes after midnight, every day, enter:
5 0 * * * /path/to/command
5 0 * * * /path/to/command
Run /path/to/script.sh at 2:15pm on the first of every month, enter:
15 14 1 * * /path/to/script.sh
15 14 1 * * /path/to/script.sh
Run /scripts/phpscript.php at 10 pm on weekdays, enter:
0 22 * * 1-5 /scripts/phpscript.php
0 22 * * 1-5 /scripts/phpscript.php
Run /root/scripts/perl/perlscript.pl at 23 minutes after midnight, 2am, 4am ..., everyday, enter:
23 0-23/2 * * * /root/scripts/perl/perlscript.pl
Run /path/to/unixcommand at 5 after 4 every Sunday, enter:
5 4 * * sun /path/to/unixcommand
23 0-23/2 * * * /root/scripts/perl/perlscript.pl
Run /path/to/unixcommand at 5 after 4 every Sunday, enter:
5 4 * * sun /path/to/unixcommand
Task: List All Your crontab Jobs
Type the following command :
# crontab -l
# crontab -u username -l
# crontab -l
# crontab -u username -l
To remove or erase all crontab jobs use the following command:
# crontab -r
crontab -r -u username
# crontab -r
crontab -r -u username
Use special string to save time
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.
Special string
|
Meaning
|
@reboot
|
Run once, at startup.
|
@yearly
|
Run once a year, "0 0 1 1 *".
|
@annually
|
(same as @yearly)
|
@monthly
|
Run once a month, "0 0 1 * *".
|
@weekly
|
Run once a week, "0 0 * * 0".
|
@daily
|
Run once a day, "0 0 * * *".
|
@midnight
|
(same as @daily)
|
@hourly
|
Run once an hour, "0 * * * *".
|
Run ntpdate every hour:
@hourly /path/to/ntpdate
Make a backup everyday:
@daily /path/to/backup/script.sh
@hourly /path/to/ntpdate
Make a backup everyday:
@daily /path/to/backup/script.sh
Understanding /etc/crontab file and /etc/cron.d/* directories
/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.
Understanding Default /etc/crontab
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
First,
the environment must be defined. If the shell line is omitted, cron
will use the default, which is sh. If the PATH variable is omitted, no
default will be used and file locations will need to be absolute. If
HOME is omitted, cron will use the invoking users’ home directory.
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
|
How do I Use Above Directories To Put My Scripts?
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
# A sample shell script to clean cached file from lighttpd web server
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
How Do I Backup Installed Cronjobs Entries?
Simply
type the following command to backup your cronjobs to a nas server
mounted at /nas01/backup/cron/users.root.bakup directory:
# crontab -l > /nas01/backup/cron/users.root.bakup
# crontab -u userName -l > /nas01/backup/cron/users.userName.bakup
# crontab -l > /nas01/backup/cron/users.root.bakup
# crontab -u userName -l > /nas01/backup/cron/users.userName.bakup
Start/Stop/Restart cron service
# /etc/init.d/crond start
# /etc/init.d/crond stop
# /etc/init.d/crond restart
For Troubleshoot look the below location mail
/var/spool/mail/oracle