【问题标题】:Django: putting secret key into crontab fileDjango:将密钥放入 crontab 文件中
【发布时间】:2014-12-04 02:07:16
【问题描述】:

根据 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

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

【问题讨论】:

  • 使用 celery/celerybeat 调度任务是另一种选择
  • 是的,我知道 celery,但是任务真的很轻,在我看来使用分布式任务队列有点过劳了。

标签: python django crontab django-settings


【解决方案1】:

我建议将命令放在 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 文件是可执行的

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这也很有用,我只是觉得其他解决方案更简洁一些。不过还是谢谢你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 2012-11-14
    • 2016-05-13
    • 2019-11-07
    • 1970-01-01
    • 2014-03-18
    相关资源
    最近更新 更多