cron

Warning

If a cron script in /etc/cron.d has a . in the file name, then it will not run! ref configs with dots in file name not working in /etc/cron.d

Configuration (System)

/etc/crontab

email

To email the output of your cron job to a specific user, add the following at the top of your cron script:

MAILTO=patrick@mycompany.com

To stop emails:

MAILTO=

…or pipe the output of your command to a file (see Logging below)…

Logging

To write output to a log file, add the following after your command:

>> /home/my-user-name/logs/update_index.log 2>&1

Note: This re-directs stdout AND stderr which isn’t much good if you are doing a SQL dump to stdout. In this case, try something like this:

mysqldump --host=localhost --user=patrick --password=mypassword redmine > $DUMP_FILE 2>> $LOG_FILE

System

System cron tasks are configured from the /etc/crontab file. The /etc/crontab file is set-up to run commands hourly, daily, monthly and weekly:

/etc/crontab

To set-up a task to run at these times, just add your shell script to the relevant folder:

/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly

Note

Check your shell script file name does NOT have an extension. For details, see run-parts doesn’t run script with sh extension

Note

To run a command at a different time, setup your file in the /etc/cron.d folder. Note: The files in this folder are in crontab format with the user inserted before the command (see Sample, System below):

User

Tip

It is probably less confusing to use the global cron system for jobs on a server. It Will be easier to work out which processes are being run…

To view your own crontab file:

crontab -l

To edit your own crontab file:

crontab -e

To edit the crontab file of another user:

crontab -e -u username

Sample

System

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=me@mail.com
HOME=/home/patrick/

# minute  (0-59),
# |       hour (0-23),
# |       |       day of the month (1-31),
# |       |       |       month of the year (1-12),
# |       |       |       |       day of the week (0-6 with 0=Sunday).
# |       |       |       |       |       user        commands
  0       0       *       *       *       myusername  /usr/bin/python2.4 /home/USERNAME/scripts/svn-hot-backup.py --archive-type=zip --num-backups=10 /home/USERNAME/svn/REPOSITORY_NAME/ /home/USERNAME/backup/svn/

User

A nice looking cron script layout (from the link below):

MAILTO=me@mail.com
# minute (0-59),
# |       hour (0-23),
# |       |       day of the month (1-31),
# |       |       |       month of the year (1-12),
# |       |       |       |       day of the week (0-6 with 0=Sunday).
# |       |       |       |       |       commands
  0       0       *       *       *       /usr/bin/python2.4 /home/USERNAME/scripts/svn-hot-backup.py --archive-type=zip --num-backups=10 /home/USERNAME/svn/REPOSITORY_NAME/ /home/USERNAME/backup/svn/

Backing up your Subversion (SVN) repository on Dreamhost with cron

Note

This sample does not include the user parameter. The user parameter is required for scripts in cron.d.

Working Hours

Cron Job every weekday during working hours. This example checks the status of the database every weekday (i.e. excluding Sat and Sun) during the working hours 9 a.m – 6 p.m:

00 09-18 * * 1-5 /home/ramesh/bin/check-db-status
00     0th Minute (Top of the hour)
09-18  9am, 10am, 11am, 12am, 1pm, 2pm, 3pm, 4pm, 5pm, 6pm
*      Every day
*      Every month
1-5    Mon, Tue, Wed, Thu and Fri (Every Weekday).