I will extend Keith Thompson answer:
His solution works perfectly for every 5 minutes but won't work for, let's say, every 13 minutes; if we use $minutes % 13
we get this schedule:
5:13
5:26
5:30
5:52
6:00 because 0%13 is 0
6:13
...
I'm sure you notice the issue. We can achieve any frequency if we count the minutes(, hours, days, or weeks) since Epoch:
#!/bin/bash
minutesSinceEpoch=$(($(date +'%s / 60')))
if [[ $(($minutesSinceEpoch % 13)) -eq 0 ]]; then
php [...]
fi
date(1)
returns current date, we format it as seconds since Epoch (%s
) and then we do basic maths:
# .---------------------- bash command substitution
# |.--------------------- bash arithmetic expansion
# || .------------------- bash command substitution
# || | .---------------- date command
# || | | .------------ FORMAT argument
# || | | | .----- formula to calculate minutes/hours/days/etc is included into the format string passed to date command
# || | | | |
# ** * * * *
$(($(date +'%s / 60')))
# * * ---------------
# | | |
# | | ·----------- date should result in something like "1438390397 / 60"
# | ·-------------------- it gets evaluated as an expression. (the maths)
# ·---------------------- and we can store it
And you may use this approach with hourly, daily, or monthly cron jobs on OpenShift:
#!/bin/bash
# We can get the
minutes=$(($(date +'%s / 60')))
hours=$(($(date +'%s / 60 / 60')))
days=$(($(date +'%s / 60 / 60 / 24')))
weeks=$(($(date +'%s / 60 / 60 / 24 / 7')))
# or even
moons=$(($(date +'%s / 60 / 60 / 24 / 656')))
# passed since Epoch and define a frequency
# let's say, every 7 hours
if [[ $(($hours % 7)) -ne 0 ]]; then
exit 0
fi
# and your actual script starts here
Notice that I used the -ne
(not equal) operator to exit the script instead of using the -eq
(equal) operator to wrap the script into the IF construction; I find it handy.
And remember to use the proper .openshift/cron/{minutely,hourly,daily,weekly,monthly}/
folder for your frequency.