【问题标题】:Crontab not using the django env variables defined in .bashrcCrontab 不使用 .bashrc 中定义的 django 环境变量
【发布时间】:2017-05-06 21:19:05
【问题描述】:

我有一个使用 .bashrc 文件中定义的环境变量的 django 应用程序。 django 应用程序正在获取 .bashrc 文件中定义的值。

我需要在 crontab 中运行 python 管理命令。通常这很容易定义。您可以在脚本中定义管理命令并将其添加到 cron 或直接在 cron 中使用该命令。

但是在这个过程中,cron 没有获取 .bashrc 文件中定义的环境变量的值。我已经尝试了几乎所有找到的文档,但仍然无法正常工作。

这是我使用的脚本:

WORKON_HOME=/home/ubuntu

PROJECT_ROOT=/home/ubuntu/projects/

. $WORKON_HOME/virtuals/bin/activate

cd $PROJECT_ROOT

python manage.py COMMAND

在我使用的 cron 选项卡中:

*/2 * * * * /home/ubuntu/test.sh

此设置在所有其他情况下都有效。现在执行 cron 时出现错误。但是脚本在手动执行时有效。

【问题讨论】:

    标签: bash ubuntu cron


    【解决方案1】:

    cron-job 不是交互式 shell。所以.bashrc 不会被获取。您必须在脚本或 crontab 本身中手动执行此操作。

    应该这样做:

    */2 * * * * source /home/ubuntu/.bashrc ; /home/ubuntu/test.sh
    

    【讨论】:

    • 我已经试过了。但是 django env 变量在 cron 中不起作用。我将输出重定向到一个文件,并且 django 应用程序错误中缺少 env 变量。
    【解决方案2】:

    找到答案: Cron not running django command

    我在 cron 脚本中手动定义了这些值。

    【讨论】:

      【解决方案3】:

      如果您使用的是 Ubuntu >=18.0,请尝试进行以下更改。 我假设您已经成功地将 django-crontab 与您的 django 应用程序集成或手动集成。现在,通过 ssh 访问您的服务器并输入“crontab -e”,您将看到您的 cronjobs 已在此处定义。在您的 cronjob 上方添加您的环境变量并使用 CTRL+o 和 CTRL+x 保存文件。请看以下几行-

      DB_NAME = "database name"
      DB_USER = "user"
      DB_PASSWORD = "db password"
      SECRET_KEY = "************************"
      
      */1 * * * * /home/sms/sms/env/bin/python /home/sms/sms/sms- 
       backend/website/manage.py crontab run 446aeeebac8c8f82d9e01bb662dc9b21 > 
       /tmp/scheduled_job.log # django>
      

      希望你摆脱它。

      【讨论】:

        猜你喜欢
        • 2020-03-02
        • 1970-01-01
        • 1970-01-01
        • 2015-08-28
        • 2014-10-18
        • 2018-02-26
        • 1970-01-01
        • 2016-08-17
        • 1970-01-01
        相关资源
        最近更新 更多