Django:将密钥放入crontab文件中

时间:2014-12-04 02:07:16

标签: python django crontab django-settings

根据Greenfeld-Roy的书"两勺Django",将密钥放入环境变量而不是设置文件是一个很好的做法。所以我遵循了这个建议,但是当尝试在cronjob中执行自编写管理命令时会导致问题。

稍后我发现我必须将密钥环境变量包含在crontab文件本身中,否则manage.py无法加载外部模块(这是因为cron不知道除了一小部分环境变量之外的任何东西)。所以在修复之后,我的crontab文件看起来像这样:

DJANGO_SETTINGS_MODULE=myproject.settings
DJANGO_SECRET_KEY=my-project-secret-key

0 0 * * * path/to/python path/to/manage.py management_command

我想知道它是否是一个很好的解决方案,或者是否还有其他(也许更多的pythonic?)方式来解决这个问题。

2 个答案:

答案 0 :(得分:3)

我建议将命令放在shell脚本中,然后通过cron调用程序。通过这种方式,cron文件看起来更简单,您可以将导出保存在单独的文件中,然后在所有其他脚本中将其导出。

示例脚本(run_command.sh)

#!/bin/bash
DJANGO_SETTINGS_MODULE=myproject.settings
DJANGO_SECRET_KEY=my-project-secret-key
path/to/python path/to/manage.py management_command

现在可以在cron文件中调用此脚本

0 0 * * * path/to/run_command.sh

并确保shell文件是可执行的

答案 1 :(得分:1)

您还应该能够将环境变量移动到另一个文件中,例如。 ~/.env并让您的crontab看起来像这样:

0 5 * * * source $HOME/.env; /path/to/command/to/run