Question: I'm trying to run this script every 5 minutes. It seems the only way to run CRON jobs on OpenShift is to use their CRON plugin. And the CRON plugin only allows for minutely, hourly, and daily scripts (by placing the script in the corresponding folder).

I am trying to run this script every 5 minutes:

```
#!/bin/bash
php /var/lib/openshift/53434c795973ca1ddc000668/app-root/runtime/repo/scheduled.php > /dev/null 2>&1

```

But right now it runs every minute (because it's placed in the minutely folder).

How can I re-write it so that it runs every 5 minutes?

Answer: 
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](https://en.wikipedia.org/wiki/Unix_time):

```
#!/bin/bash

minutesSinceEpoch=$(($(date +'%s / 60')))

if [[ $(($minutesSinceEpoch % 13)) -eq 0 ]]; then
    php [...]
fi

```

[`date(1)`](http://linux.die.net/man/1/date) 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.
You can make use of **minutely** cron job available. The jobs are run at a specified frequency and you can instrument your job to inspect the date and/or time when your job runs.

Here is an example for running a job every 5 minutes. Place the below code snippet in an executable file at path `.openshift/cron/minutely/awesome_job` and give proper permissions `chmod +x awesome_job` then add it to your application repository, commit and push.

The snippet

```
#!/bin/bash
if [ ! -f $OPENSHIFT_DATA_DIR/last_run ]; then
  touch $OPENSHIFT_DATA_DIR/last_run
fi
if [[ $(find $OPENSHIFT_DATA_DIR/last_run -mmin +4) ]]; then #run every 5 mins
  rm -f $OPENSHIFT_DATA_DIR/last_run
  touch $OPENSHIFT_DATA_DIR/last_run
  # The 'awesome_command(s)' that you want to run every 5 minutes
fi

```

**Explanation:**

* This snippet actually creates an empty file named 'last\_run' just to
note down the last run status and then starts your job.
* The next minute, your 'awesome\_job' will be executed and now it tries to find file 'last\_run' modified in last 4 minutes. But your
file 'last\_run' was created just a minute ago and hence the condition fails and exits. This continues.
* At fifth minute, while finding (with `-mmin +4`), your 'last\_run' will be shown and now, the file 'last\_run' will be deleted and recreated and your awesome command(s) will be executed.

Source (Official Docs): <https://developers.openshift.com/managing-your-applications/background-jobs.html#_execution_timing>