Python Django:将密钥放入crontab文件

Python Django:将密钥放入crontab文件,python,django,crontab,django-settings,Python,Django,Crontab,Django Settings,根据Greenfeld Roy的书《两勺Django》,将密钥放入环境变量而不是设置文件中是一种很好的做法。因此,我遵循了这个建议,但当试图在cronjob中执行自行编写的管理命令时,会出现问题 过了一会儿,我发现我必须将secret key环境变量包含到crontab文件中,否则manage.py无法加载外部模块(这是因为cron只知道环境变量的一小部分)。因此,修复后,我的crontab文件如下所示: DJANGO_SETTINGS_MODULE=myproject.settings DJA

根据Greenfeld Roy的书《两勺Django》,将密钥放入环境变量而不是设置文件中是一种很好的做法。因此,我遵循了这个建议,但当试图在cronjob中执行自行编写的管理命令时,会出现问题

过了一会儿,我发现我必须将secret key环境变量包含到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
0 5 * * * source $HOME/.env; /path/to/command/to/run

我想知道这是否是一个好的解决方案,或者是否有其他(可能更像pythonic?)方法来解决这个问题。

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

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

0 0 * * * path/to/python path/to/manage.py management_command
0 5 * * * source $HOME/.env; /path/to/command/to/run

您还应该能够在另一个文件中移动环境变量,例如,
~/.env
,并使您的crontab如下所示:

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

0 0 * * * path/to/python path/to/manage.py management_command
0 5 * * * source $HOME/.env; /path/to/command/to/run

我建议将该命令放入shell脚本中,然后通过cron调用该程序。这样,cron文件看起来更简单,您可以将导出保存在一个单独的文件中,然后在所有其他脚本中对其进行源代码转换

示例脚本(run_command.sh)

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

0***路径/to/run_命令.sh


并确保shell文件是可执行的

我建议将该命令放入shell脚本中,然后通过cron调用该程序。这样,cron文件看起来更简单,您可以将导出保存在一个单独的文件中,然后在所有其他脚本中对其进行源代码转换

示例脚本(run_command.sh)

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

0***路径/to/run_命令.sh


确保shell文件是可执行的

使用芹菜/celerybeat调度任务是一种替代方法是的,我知道芹菜,但任务很轻,在我看来,使用分布式任务队列有点过度工作。使用芹菜/celerybeat调度任务是一种替代方法是的,我知道芹菜,但是任务真的很轻,在我看来,使用分布式任务队列有点过度工作。这也很有用,我只是觉得另一个解决方案更干净一点。尽管如此,还是要谢谢你。这也很有用,我只是觉得另一个解决方案更干净一点。谢谢你。