27

I have a centos server and I want to run a job on it at 11PM every 2 days, how do I do that?

0

2 Answers 2

52

You can use the following cron arrangement. The fields denote (from left-to-right):
Minute, Hour, Day of Month, Month, Day of Week. The "*/2" in the Day of Month field means "every two days".

0 23 */2 * * insert_your_script_here.sh

3
  • 1
    It should be added that this line is valid if the user is invoking 'crontab -e', which would edit user's crontab. If somebody wants to use system wide crontab, the user who should run the command must be specified before that command. Other than that, its perfect :)
    – Torian
    Nov 20, 2010 at 19:26
  • 9
    My RHEL's 'man -s 5 crontab' says that '*' is 'first-last', which would expand '*/2' into '1,3,5,7...29,31'. I think that means that the script would run the 31st and the first on months with 31 days, which I don't think is the intended behavior.
    – Luke
    Nov 20, 2010 at 19:59
  • Are we certain this will work no matter the number of days in the month? For reference, is this unnecessary: unix.stackexchange.com/questions/16093/… Feb 20 at 20:11
12

In general, you need to use crontab to define the task and the run schedule.

e.g.

crontab -e -u root

This will put you in VI editing root's crontab entry. Then as ewwhite says, enter:

0 23 */2 * * insert_your_script_here.sh

and then [^ESC] ZZ to save the changes.

This is a good first attempt, but this is not quite every alternate day, as it will run on the 30th of the month and then next run on the 2nd of the month. If you really do need it to be every 2nd day, then run the script EVERY night.

0 23 * * * insert_your_script_here.sh

and in the start of the script use

#!/bin/sh
if [ -f /tmp/altday.txt ]; then
  rm /tmp/altday.txt
  exit
fi
touch /tmp/altday.txt

This uses a text file to force the script to exit every alternate invocation.

0

Not the answer you're looking for? Browse other questions tagged .