Sample Cron Configurations¶
Retry after failure feature¶
You can run cron by passing RETRY_AFTER_FAILURE_MINS
param.
This will re-runs not next time runcrons is run, but at least RETRY_AFTER_FAILURE_MINS
after last failure:
class MyCronJob(CronJobBase):
RUN_EVERY_MINS = 60 # every hours
RETRY_AFTER_FAILURE_MINS = 5
schedule = Schedule(run_every_mins=RUN_EVERY_MINS, retry_after_failure_mins=RETRY_AFTER_FAILURE_MINS)
Run at times feature¶
You can run cron by passing RUN_EVERY_MINS
or RUN_AT_TIMES
params.
This will run job every hour:
class MyCronJob(CronJobBase):
RUN_EVERY_MINS = 60 # every hours
schedule = Schedule(run_every_mins=RUN_EVERY_MINS)
This will run job at given hours:
class MyCronJob(CronJobBase):
RUN_AT_TIMES = ['11:30', '14:00', '23:15']
schedule = Schedule(run_at_times=RUN_AT_TIMES)
Hour format is HH:MM
(24h clock). django-cron
will interpret
these times in the local timezone of your site, as specified by
the TIME_ZONE
setting.
You can also mix up both of these methods:
class MyCronJob(CronJobBase):
RUN_EVERY_MINS = 120 # every 2 hours
RUN_AT_TIMES = ['6:30']
schedule = Schedule(run_every_mins=RUN_EVERY_MINS, run_at_times=RUN_AT_TIMES)
This will run job every 2h plus one run at 6:30.
Allowing parallels runs¶
By default parallels runs are not allowed (for security reasons). However if you want enable them just add:
ALLOW_PARALLEL_RUNS = True
in your CronJob class.
Note
Note this requires a caching framework to be installed, as per https://docs.djangoproject.com/en/dev/topics/cache/
If you wish to override which cache is used, put this in your settings file:
DJANGO_CRON_CACHE = 'cron_cache'
FailedRunsNotificationCronJob¶
This example cron check last cron jobs results. If they were unsuccessfull 10 times in row, it sends email to user.
Install required dependencies: Django>=1.7.0
, django-common>=0.5.1
.
Add django_cron.cron.FailedRunsNotificationCronJob
to your CRON_CLASSES
in settings file.
To set up minimal number of failed runs set up MIN_NUM_FAILURES
in your cron class (default = 10). For example:
class MyCronJob(CronJobBase):
RUN_EVERY_MINS = 10
MIN_NUM_FAILURES = 3
schedule = Schedule(run_every_mins=RUN_EVERY_MINS)
code = 'app.MyCronJob'
def do(self):
... some action here ...
Emails are imported from ADMINS
in settings file
To set up email prefix, you must add FAILED_RUNS_CRONJOB_EMAIL_PREFIX
in your settings file (default is empty). For example:
FAILED_RUNS_CRONJOB_EMAIL_PREFIX = "[Server check]: "
FailedRunsNotificationCronJob
checks every cron from CRON_CLASSES