I want a script to run every 40mins beginning on the 40th minute.
so that means:
00:40, 01:20, 02:00, 02:40, 03:20...
So I made this entry to cron:
*/40 * * * * /path/to/script/foo.sh
Unfortunately this runs the script every 40th minute of the hour:
00:40, 01:40, 02:40...
The same goes with the script that I meant to run every 25mins.
Am I missing something here?
ANSWERS
Alright, in case you happen to drop by here having the same problem
here's how I solved it:
# 40mins-interval
40 0 * * * /path/foo.sh (0)
0,40 2-22/2 * * * /path/foo.sh (2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22)
20 1-23/2 * * * /path/foo.sh (1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23)
# 25mins-interval
25,50 0 * * * /path/foo.sh (0)
0,25,50 5-20/5 * * * /path/foo.sh (5, 10, 15, 20)
15,40 1-21/5 * * * /path/foo.sh (1, 6, 11, 16, 21)
5,30,55 2-22/5 * * * /path/foo.sh (2, 7, 12, 17, 22)
20,45 3-23/5 * * * /path/foo.sh (3, 8, 13, 18, 23)
10,35 4-19/5 * * * /path/foo.sh (4, 9, 14, 19)
Notes:
1. There will still be collisions in this schedule (i.e: see schedules that run on the 0th and 10th minutes on both intervals).
2. The script won't run at an exact interval from its last run today going on the next day (i.e: 25min interval ends @23:45 today, begins @00:25 next day).
You will need to add several entries for the same script to cron, one for running on the hour, one for twenty past and one for twenty to the hour.
You say that it should start at 00:40, but the run of the previous day will be at 23:20. Do you want an 80 minute gap in runs around midnight?
You can achieve any frequency if you count the minutes(, hours, days, or weeks) since Epoch, add a condition to the top of your script, and set the script to run every minute on your crontab:
date(1)
returns current date, we format it as seconds since Epoch (%s
) and then we do basic maths:And you may use this approach with hourly, daily, or monthly cron jobs:
For the task you want to accomplish you have to write a little bit more complex entry in your crontab.
You see the pattern above?
00:40, 01:20, 02:00, 02:40, 03:20 and again 04:00, 04:40, 05:20, 06:00, 06:40, 07:20, 08:00
I can break it down into three entries:
You can accomplish this with more than one entries:
NOTE: It might have minor issues, but there I gave you direction :)
PS: This will explain alot more
It always splits the current hour only.
40/40 = 1 so it runs every 40th minute of an hour.
*/5 would do 5, 10, 15...
You should go for larger intervals.
Do */30 for your 25 minute interval and every 60 minutes for your 40 minutes interval.
Otherwise set up two crontabs for your script: