Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kraiz/django-crontab
dead simple crontab powered job scheduling for django.
https://github.com/kraiz/django-crontab
Last synced: 3 months ago
JSON representation
dead simple crontab powered job scheduling for django.
- Host: GitHub
- URL: https://github.com/kraiz/django-crontab
- Owner: kraiz
- License: other
- Created: 2011-07-18T22:21:21.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2022-10-04T15:02:40.000Z (about 2 years ago)
- Last Synced: 2024-08-02T09:09:39.684Z (3 months ago)
- Language: Python
- Homepage:
- Size: 105 KB
- Stars: 831
- Watchers: 24
- Forks: 111
- Open Issues: 40
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG
- License: LICENSE
Awesome Lists containing this project
README
.. image:: https://img.shields.io/travis/kraiz/django-crontab/master.svg
:target: https://travis-ci.org/kraiz/django-crontab
.. image:: https://img.shields.io/coveralls/kraiz/django-crontab/master.svg
:target: https://coveralls.io/r/kraiz/django-crontab
.. image:: https://img.shields.io/pypi/v/django-crontab.svg
:target: https://pypi.python.org/pypi/django-crontab
.. image:: https://img.shields.io/pypi/pyversions/django-crontab.svg
:target: https://pypi.python.org/pypi/django-crontab
.. image:: https://img.shields.io/pypi/l/django-crontab.svg
:target: https://pypi.python.org/pypi/django-crontababout
=====dead simple crontab powered job scheduling for django (1.8-2.0).
setup
=====
install via pip:.. code:: bash
pip install django-crontab
add it to installed apps in django settings.py:
.. code:: python
INSTALLED_APPS = (
'django_crontab',
...
)now create a new method that should be executed by cron every 5 minutes, f.e. in `myapp/cron.py`:
.. code:: python
def my_scheduled_job():
passnow add this to your settings.py:
.. code:: python
CRONJOBS = [
('*/5 * * * *', 'myapp.cron.my_scheduled_job')
]you can also define positional and keyword arguments which let you call django management commands:
.. code:: python
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):
.. code:: bash
python manage.py crontab add
show current active jobs of this project:
.. code:: bash
python manage.py crontab show
removing all defined jobs is straightforward:
.. code:: bash
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:
1. required: cron timing in usual format (see `Wikipedia `_ and `crontab.guru `_ for more examples)
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
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:.. code:: python
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.0CRONTAB_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 variableCRONTAB_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_NAMECRONTAB_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.0CRONTAB_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_NAMEcontributors
============
arski cinghiale meric426 justdoit0823 chamakenfaq
===
* **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.