【问题标题】:crontab not getting my current envrioment variablescrontab 没有得到我当前的环境变量
【发布时间】:2022-07-02 03:11:37
【问题描述】:

我想要一个 cron 工作,一切都已经设置好了,而且 cron 也在工作,但不幸的是,cron 没有得到我的环境变量。我正在使用 os 获取我的环境变量,它们在整个项目中运行良好,但在我的 cron 中却没有。

settings.py

SECRET_KEY = os.environ.get('SECRET_KEY')

# Cron Jobs
CRONJOBS = [
    ('* * * * *', 'projects.cron.notifications_cron', '>> /cron/django_cron.log 2<&1')
]

crontab -e

 * * * * /usr/local/bin/python /app/manage.py crontab run 744fbefdbf3ad30bec13

error in log file

raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")

当我在我的settings.py 中设置SECRET_KEY 硬编码时,它工作正常,但我想从我的环境变量中获取它。

【问题讨论】:

  • Cron 不使用你当前的环境。
  • 那么如何在 cron 中设置我当前的环境变量?
  • 你没有。您可能误解了 cron 的工作原理。您只是在为在其自己的环境中运行的服务器编辑配置文件。您当前的环境对其没有影响。您可以做的是编写一个脚本来设置变量或将它们包含在命令行中。但坦率地说,这更像是一个 Linux 用户,而不是一个编程话题。
  • here 你有办法识别。另一种解决方法是使用配置文件并从那里加载变量,您可以使用 decouple 库。
  • @Augusto 它不工作:(

标签: python django cron


【解决方案1】:

您可以将环境变量分配到 crontab 环境文件 (crontab -e) 中,因此我将所有环境变量转换为 env.txt 并将 crontab 环境文件合并到该 env.txt 文件中,并将 crontab 环境文件替换为我的env.txt

crontab -e 默认:

0 */24 * * * /usr/local/bin/python /app/manage.py crontab run 5d758d881d8f93b61f4d1b6a43eb72f6 >> /cron/django_cron.log 2<&1 # django-cronjobs for app

如果您在该文件中分配一些变量,如下所示,那么 crontab 将获得该环境。

VARIABLE=value
0 */24 * * * /usr/local/bin/python /app/manage.py crontab run 5d758d881d8f93b61f4d1b6a43eb72f6 >> /cron/django_cron.log 2<&1 # django-cronjobs for app

这是实现它的 bash 命令

$ printenv > env.txt # this will add all your environment variables in to env.txt
$ cat /var/spool/cron/crontabs/root >> env.txt # this will merge crontab environment file with your env.txt
$ cat env.txt > /var/spool/cron/crontabs/root # this will replace the crontab environment file with your env.txt

这是我自己制作的唯一解决方案,希望对你们有所帮助。谢谢

【讨论】:

    【解决方案2】:

    像这样在 crontab 中定义你的全局变量,

    myVar='my variable reference'

    如果您的变量不是恒定的,则意味着本质上是动态的。

    按照以下步骤操作:

    通过以下命令查找 crontab 文件。

    find / -name crontab cd &lt;path&gt;

    这里是你的 cronjob 文件,sudo 的 vi 或 nano。通过 chown : 或 chmod 755 授予权限

    更新变量的过程。以下代码在 Bash 中,因此您可以直接在 bash 文件中使用它,这些文件可以处理,也可以通过帮助子进程库在 python 等其他工具中运行。

    lineNumber=$(grep -n 'myVar=' &lt;file-path&gt;)

    使用新的 myVar 更改行号及其更新后的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-21
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 2014-08-03
      相关资源
      最近更新 更多