根据格林菲尔德·罗伊(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?)解决此问题的方法。

最佳答案

我建议将命令放在外壳脚本中,然后通过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

并确保外壳文件可执行

10-06 08:39
查看更多