How to Run a cron Job Every Two Weeks / Months / Days

By: Zhiqiang Ma In: Linux

cron can only run the job for every one week/month/day/…. But we may want to run some jobs for every two weeks/months/days… under some situation such as bakup for every other week. With the help of the shell programming language we can easily achieve this goal.

The crontab line has this kind of format:

.---------------- minute (0-59)
|  .------------- hour (0-23)
|  |  .---------- day of month (1-31)
|  |  |  .------- month (1-12) OR jan,feb,mar,apr ...
|  |  |  |  .---- day of week (0-6) (Sunday=0 or 7) OR sun,mon,tue ...
|  |  |  |  |
*  *  *  *  *  command to be executed

The shell code:

#!/bin/bash
mark_file=/tmp/job-run-marker
# check whether the job runned last week
if [ -e $mark_file ] ; then
  rm -f $mark_file
else
  touch $mark_file
  exit 0
fi

# job command is here

The script will not find $mark_file on the first run, so it will create it and exit. On the second run the script will remove $mark_file and then proceed to execute the job command. For the third run, it is the same as the first run. So if this script is run weekly by cron, the job command will run every two weeks.

An example.
We want to bakup xen DomU files for every two weeks. We create a script /lhome/share/bin/xen-bak. The start of this script is like what we list above. Then run

crontab -e

And add this line:

0 2 * * 2 /home/share/bin/xen-bak

The bakup command will run at 2:00 for every other Tuesday.

Author: Zhiqiang Ma Posted on: Feb 20, 2010 Views: 3,636
Tags: , , , ,
Like this post? Subscribe full-text feeds from all Fclose.com blogs:
One Response to How to Run a cron Job Every Two Weeks / Months / Days | Add Comment
  • I don’t think this is correct, how does it know to run every alternate tuesday
    you should instead be using

    0 2 * * 2/2 /home/share/bin/xen-bak

Add your comments, share your thoughts

Be nice. Keep it clean. Stay on topic. No spam.