Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django custom command and cron

I want my custom made Django command to be executed every minute. However it seems like python /path/to/project/myapp/manage.py mycommand doesn't seem to work while at the directory python manage.py mycommand works perfectly.

How can I achieve this ? I use /etc/crontab with:

****** root python /path/to/project/myapp/manage.py mycommand
like image 681
Hellnar Avatar asked Oct 21 '09 14:10

Hellnar


2 Answers

I think the problem is that cron is going to run your scripts in a "bare" environment, so your DJANGO_SETTINGS_MODULE is likely undefined. You may want to wrap this up in a shell script that first defines DJANGO_SETTINGS_MODULE

Something like this:

#!/bin/bash

export DJANGO_SETTINGS_MODULE=myproject.settings 
./manage.py mycommand

Make it executable (chmod +x) and then set up cron to run the script instead.

Edit

I also wanted to say that you can "modularize" this concept a little bit and make it such that your script accepts the manage commands as arguments.

#!/bin/bash

export DJANGO_SETTINGS_MODULE=myproject.settings
./manage.py ${*}

Now, your cron job can simply pass "mycommand" or any other manage.py command you want to run from a cron job.

like image 70
Joe Holloway Avatar answered Nov 10 '22 00:11

Joe Holloway


cd /path/to/project/myapp && python manage.py mycommand

By chaining your commands like this, python will not be executed unless cd correctly changes the directory.

like image 41
davidfischer Avatar answered Nov 10 '22 01:11

davidfischer