Skip to main content

dead simple crontab powered job scheduling for django

Project description

https://img.shields.io/travis/kraiz/django-crontab/master.svg https://img.shields.io/coveralls/kraiz/django-crontab/master.svg https://img.shields.io/pypi/dw/django-crontab.svg https://img.shields.io/pypi/v/django-crontab.svg https://img.shields.io/pypi/pyversions/django-crontab.svg https://img.shields.io/pypi/l/django-crontab.svg

about

dead simple crontab powered job scheduling for django (1.8+).

setup

install via pip:

pip install django-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 * * * *', 'myproject.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 straight forward:

python manage.py crontab remove

config

there are a bunch of setting vars to customize behavior. each of this comes with default values that should properly fit. if not, feel free to overwrite.

CRONJOBS
  • list of jobs, each defined as tuple:

    • format 1:

      1. required: cron timing (in usual format: http://en.wikipedia.org/wiki/Cron#Format)

      2. required: the python module path to the method

      3. optional: a job specific suffix (f.e. to redirect out/err to a file, default: ‘’)

    • format 2:

      1. required: cron timing (in usual format: http://en.wikipedia.org/wiki/Cron#Format)

      2. required: the python module path to the method

      3. optional: list of positional arguments for the method (default: [])

      4. optional: dict of keyword arguments for the method (default: {})

      5. 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 contrab 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 wanne do or declare before each job gets executed. A good point for environment variables.

  • default: ‘’ (empty string)

  • example: ‘STAGE=production’

CRONTAB_COMMAND_SUFFIX
  • something you wanne 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.

  • 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)

license

MIT-License, see LICENSE file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-crontab-0.7.0.tar.gz (7.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_crontab-0.7.0-py2.py3-none-any.whl (10.8 kB view details)

Uploaded Python 2Python 3

File details

Details for the file django-crontab-0.7.0.tar.gz.

File metadata

File hashes

Hashes for django-crontab-0.7.0.tar.gz
Algorithm Hash digest
SHA256 5c598b250058972e37e6bb2ed7a5d684898d31577082178a8e069f9aac2ab6bc
MD5 ce03b32d60b7b7c76c7bc56b688377b9
BLAKE2b-256 2c4a95219bdbcedb5d5b2c478573b37e381925de0beb2eb28d2c397c5d7f5368

See more details on using hashes here.

File details

Details for the file django_crontab-0.7.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_crontab-0.7.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 44e87692caea56bd0b77e83a0c2b8efd5a34f768a898acf73e2eb8386ed19478
MD5 6b852b5069f110c973581d5979ab9705
BLAKE2b-256 5dc7ad9b1f3d84a21c6cfed8dac875d60f87a3b957350271fd583516b70b7b00

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page