Package: django-kronos
.. 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.pyimport kronosimport 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.pyfrom django.core.management.base import BaseCommandimport 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.pyfrom django.core.management.base import BaseCommandimport 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^^^^^^^^^^^^^^^^^^::$ python manage.py runtask complainI forgot to migrate our applications's cron jobs to our new server! Darn!Keep in mind that if the registered task is a django command you have to run itin the normal way::$ python manage.py taskList all registered tasks^^^^^^^^^^^^^^^^^^::$ python manage.py showtasks* List of tasks registered in Kronos *>> Kronos tasks>> my_task_one>> my_task_two>> Django tasks>> my_django_taskRegister tasks with cron^^^^^^^^^^^^^^^^^^^^^^^^::$ python manage.py installtasksInstalled 1 task.You can review the crontab with a ``crontab -l`` command::$ crontab -l0 0 * * * /usr/bin/python /path/to/manage.py runtask complain --settings=myprpoject.settings $KRONOS_BREAD_CRUMB0 0 * * * /usr/bin/python /path/to/manage.py task --settings=myprpoject.settings $KRONOS_BREAD_CRUMBUsually this line will work pretty well for you, but there can be some rarecases when it requires modification. You can achieve it with a number ofsettings variables used by kronos:KRONOS_PYTHONPython interpreter to build a crontab line (defaults to the interpreter you used toinvoke the management command).KRONOS_MANAGEManagement command to build a crontab line (defaults to ``manage.py`` in the currentworking directory).KRONOS_PYTHONPATHExtra path which will be added as a ``--pythonpath`` option to the management command.KRONOS_POSTFIXExtra string added at the end of the command. For dirty thinks like ``> /dev/null 2>&1``KRONOS_PREFIXExtra string added at the beginning of the command. For dirty thinks like ``source /path/to/env &&``.If you use the ``virtualenv``, you can add the environment path by ``echo "KRONOS_PREFIX = 'source `echo $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 ``$KRONOS_BREAD_CRUMB`` is defined to detect which tasks have to be deleted afterbeing installed.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 itto 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 outsideof 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 ValueError0.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.