I have a centos server and I want to run a job on it at 11PM every 2 days, how do I do that?
2 Answers
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
-
1It 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 :)– TorianNov 20, 2010 at 19:26
-
9My 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.– LukeNov 20, 2010 at 19:59
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.