dead simple crontab powered job scheduling for django
Project description
about
dead simple crontab powered job scheduling for django (1.8-3.1).
setup
install via pip:
pip install dj-crontab
add it to installed apps in django settings.py:
INSTALLED_APPS = (
'django_crontab',
...
)
now create a new method that should be executed by cron every 5 minutes, f.e. in myapp/cron.py:
def my_scheduled_job():
pass
now add this to your settings.py:
CRONJOBS = [
('*/5 * * * *', 'myapp.cron.my_scheduled_job')
]
you can also define positional and keyword arguments which let you call django management commands:
CRONJOBS = [
('*/5 * * * *', 'myapp.cron.other_scheduled_job', ['arg1', 'arg2'], {'verbose': 0}),
('0 4 * * *', 'django.core.management.call_command', ['clearsessions']),
]
finally, run this command to add all defined jobs from CRONJOBS to crontab (of the user which you are running this command with):
python manage.py crontab add
show current active jobs of this project:
python manage.py crontab show
removing all defined jobs is straightforward:
python manage.py crontab remove
config
there are a bunch of setting vars to customize behavior. each of them comes with default values that should properly fit. if not, feel free to overwrite.
- CRONJOBS
list of jobs, each defined as a tuple:
format 1:
required: cron timing in usual format (see Wikipedia and crontab.guru for more examples)
required: the python module path to the method
optional: a job-specific suffix (f.e. to redirect out/err to a file, default: ‘’)
format 2:
required: cron timing
required: the python module path to the method
optional: list of positional arguments for the method (default: [])
optional: dict of keyword arguments for the method (default: {})
optional: a job specific suffix (f.e. to redirect out/err to a file, default: ‘’)
NOTE: Run “python manage.py crontab add” each time you change CRONJOBS in any way!
default: []
example:
CRONJOBS = [ ('*/5 * * * *', 'myapp.cron.my_scheduled_job'), # format 1 ('0 0 1 * *', 'myapp.cron.my_scheduled_job', '>> /tmp/scheduled_job.log'), # format 2 ('0 0 1 * *', 'myapp.cron.other_scheduled_job', ['myapp']), ('0 0 * * 0', 'django.core.management.call_command', ['dumpdata', 'auth'], {'indent': 4}, '> /home/john/backups/last_sunday_auth_backup.json'), ]
- CRONTAB_LOCK_JOBS
prevent starting a job if an old instance of the same job is still running
default: False
since 0.5.0
- CRONTAB_EXECUTABLE
path to the crontab executable of your os
default: ‘/usr/bin/crontab’
- CRONTAB_DJANGO_PROJECT_NAME
the name of your django project, used to build path path to manage.py and to mark the jobs in crontab via comment for later removing
default is read from DJANGO_SETTINGS_MODULE environment variable
- CRONTAB_DJANGO_MANAGE_PATH
path to manage.py file (including the manage.py itself, i.e. ‘/home/john/web/manage.py’)
default is build using DJANGO_PROJECT_NAME
- CRONTAB_DJANGO_SETTINGS_MODULE
dotted python path to the settings module to run the command with
default is the common one from the environment variable and will not be overwritten
since 0.6.0
- CRONTAB_PYTHON_EXECUTABLE
path to the python interpreter executable used to run the scheduled job
default uses the interpreter executable used to add the jobs (via ‘python manage.py crontab add’)
- CRONTAB_COMMAND_PREFIX
something you want to do or declare, before each job gets executed. A good place for environment variables.
default: ‘’ (empty string)
example: ‘STAGE=production’
- CRONTAB_COMMAND_SUFFIX
something you want to do after each job was executed.
default: ‘’ (empty string)
example: ‘2>&1’
- CRONTAB_COMMENT
used for marking the added contab-lines for removing, default value includes project name to distinguish multiple projects on the same host and user
default: ‘django-crontabs for ‘ + CRONTAB_DJANGO_PROJECT_NAME
contributors
arski cinghiale meric426 justdoit0823 chamaken
faq
I’m using this old django version (<1.8) and can’t install this package. What should i do? - Yeah, update django of course (!) or - as you seem to be familiar with old, unsupported versions, install the old version of this package too (it support django 1.3-1.7):
pip install django-crontab==0.6.0
Will it work with windows? - No.
Will it work within a docker? - Not immediately, you need to start the cron service.
Problems with `pyenv`? - You maybe need to setup the PATH variable within crontab. Have a look at #60
I’m getting “bad command”/”errors in cronfile” while installing via “crontab add”. What’s wrong? - Maybe it’s your cron time format, it can have 5 or 6 fields. Check that your system supports 6 or just define 5 in CRONJOBS. (see #23)
Why does the LOGGING not work when started via cronjob? - That’s maybe something about the current working dir. Please set your FileHandler’s file path absolute and try again. (see #31)
license
MIT-License, see LICENSE file.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for dj_crontab-0.8.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9ddcfb31dbd2512c70226346c02a8f084386af71485708373a4bb7ee8ce271b3 |
|
MD5 | 32268f90ef8351a16f34b62a4c3b9b77 |
|
BLAKE2b-256 | c3aa10a99506685ed8698e8c3402f5c5485a387efc7b30b34805cc112ae82654 |