Django:将密钥放入crontab文件



根据Greenfeld-Roy的书"Two scoops of 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?)方法来解决这个问题。

我建议将命令放在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

并确保外壳文件是可执行的

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

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

最新更新