Skip to main content

Kronos is a Django application that makes it easy to define and schedule tasks with cron.

Project description

.. image:: https://raw.githubusercontent.com/jgorset/django-kronos/master/docs/banner.png

.. image:: https://coveralls.io/repos/github/jgorset/django-kronos/badge.svg?branch=master
:target: https://coveralls.io/github/jgorset/django-kronos?branch=master
.. image:: https://travis-ci.org/jgorset/django-kronos.svg?branch=master
:target: https://travis-ci.org/jgorset/django-kronos
.. image:: https://img.shields.io/github/license/jgorset/django-kronos.svg
:target: https://raw.githubusercontent.com/jgorset/django-kronos/master/LICENSE
.. image:: https://img.shields.io/pypi/v/django-kronos.svg
:target: https://pypi.python.org/pypi/django-kronos/

Usage
-----

Define tasks
^^^^^^^^^^^^

Kronos collects tasks from ``cron`` modules in your project root and each of your applications::

# app/cron.py

import kronos
import random

@kronos.register('0 0 * * *')
def complain():
complaints = [
"I forgot to migrate our applications's cron jobs to our new server! Darn!",
"I'm out of complaints! Damnit!"
]

print random.choice(complaints)

Kronos works with Django management commands, too::

# app/management/commands/task.py

from django.core.management.base import BaseCommand

import kronos

@kronos.register('0 0 * * *')
class Command(BaseCommand):
def handle(self, *args, **options):
print('Hello, world!')

If your management command accepts arguments, just pass them in the decorator::

# app/management/commands/task.py

from django.core.management.base import BaseCommand

import kronos

@kronos.register('0 0 * * *', args={'-l': 'nb'})
class Command(BaseCommand):

def add_arguments(self, parser):
parser.add_argument(
'-l', '--language',
dest='language',
type=str,
default='en',
)

def handle(self, *args, **options):
if options['language'] == 'en':
print('Hello, world!')

if options['language'] == 'nb':
print('Hei, verden!')


Run tasks manually
^^^^^^^^^^^^^^^^^^

::

pythonmanage.pyruntaskcomplainIforgottomigrateourapplicationsscronjobstoournewserver!Darn!Keepinmindthatiftheregisteredtaskisadjangocommandyouhavetorunitinthenormalway:: python manage.py task


List all registered tasks
^^^^^^^^^^^^^^^^^^

::

Missing open brace for superscript python manage.py installtasks
Installed 1 task.

You can review the crontab with a ``crontab -l`` command::

crontabl00/usr/bin/python/path/to/manage.pyruntaskcomplainsettings=myprpoject.settingsKRONOS_BREAD_CRUMB
0 0 * * * /usr/bin/python /path/to/manage.py task --settings=myprpoject.settings Misplaced &VIRTUAL_ENV`/bin/activate && '" >> myprpoject/settings.py``

Define these variables in your ``settings.py`` file if you wish to alter crontab lines.

The env variable ``KRONOSBREADCRUMBisdefinedtodetectwhichtaskshavetobedeletedafterbeinginstalled.Installation:: pip install django-kronos

... and add ``kronos`` to ``INSTALLED_APPS``.


Contribute
----------

* Fork the repository.
* Do your thing.
* Open a pull request.
* Receive cake.

I love you
----------

Johannes Gorset made this. You should `tweet me <http://twitter.com/jgorset>`_ if you can't get it
to work. In fact, you should tweet me anyway.


1.0.0
+++++

* Django 1.10 support.

0.9.0
+++++

* Fixed a bug that caused Kronos to crash if the settings module resided outside
of the project directory.
* Fixed a bug that caused Kronos to remove other crontabs upon uninstalling.

0.8.0
+++++

* Kronos is now even more compatible with Python 3.
* Kronos is no longer compatible with Python 2.6.
* Kronos is no longer compatible with Django 1.7.
* You may now prefix commands with ``KRONOS_PREFIX``.
* Fixed an issue where Kronos would not pick up on AppConfig apps.

0.7.0
+++++

* You may now pass arguments to Django management commands registered with Kronos.
* Kronos is now compatible with Python 3.
* Kronos will now log errors when it fails to load tasks.

0.6.0
+++++

* You may now register Django management commands.

0.5.0
+++++

* You may now list commands with ``python manage.py showtasks``.

0.4.0
+++++

* You may now postfix commands with ``KRONOS_POSTFIX``.

0.3.0
+++++

* You may now customize the interpreter, management path and python path for tasks with the ``KRONOS_PYTHON``,
``KRONOS_MANAGE`` and ``KRONOS_PYTHONPATH`` settings, respectively.

0.2.3
+++++

* Kronos now supports Django 1.4-style projects.
* Fixed a bug that caused installation to fail for users that didn't already have a crontab.

0.2.2
+++++

* Fixed a bug that caused unclosed single quotes in the crontab to raise a ValueError

0.2.1
+++++

* Fixed a bug that caused 'cron'-modules in the project root to be ignored.

0.2.0
+++++

* Kronos will now collect tasks from a 'cron' module in the project root.

Supported by

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