【问题标题】:Can't find dotenv environment variables from cron job无法从 cron 作业中找到 dotenv 环境变量
【发布时间】:2020-10-23 09:30:09
【问题描述】:

我正在从 python 库运行 python 脚本,该脚本使用 dotenv 从库根目录中的 .env 文件加载一些环境变量。

这可以从命令行运行,但是当我尝试使用以下命令作为 cronjob 运行时:

* * * * * source ./path_to_venv/activate; python ./path_to_script.py

我收到一个关键错误,因为它找不到环境变量。

任何想法为什么这不起作用?

非常感谢您的帮助!

【问题讨论】:

    标签: python variables cron environment dotenv


    【解决方案1】:

    如果您使用dotenvs 默认配置路径,它会从path.resolve(process.cwd(), '.env') 解析,当从cron 运行您的脚本时,它不会解析为您所期望的。

    因此,如果您的 .env 文件与您的脚本处于同一级别,请使用此示例:

    const dotenv = require('dotenv')
    dotenv.config({ path: __dirname + '/.env' })
    

    【讨论】:

      【解决方案2】:

      我也在使用 crontab 来执行我的 Node JS 项目。我必须像这样明确声明我的.env 文件的路径:

      require('dotenv').config({ path: '/var/www/html/myproject/.env' });
      

      在 python-dotenv 中,我相信它可以通过使用类似的方式完成:

      # OR, explicitly providing path to '.env'
      from pathlib import Path  # Python 3.6+ only
      env_path = Path('.') / '.env'
      load_dotenv(dotenv_path=env_path)
      

      Source

      【讨论】:

        【解决方案3】:

        我不知道这个是否有更优雅的解决方案。 通过在 cronjob 顶部添加环境变量,我能够使我的脚本在 crontab 中运行。

        API_KEY=value
        API_KEY_SECRET=value
        ACCESS_TOKEN=value=value
        ACCESS_TOKEN_SECRET=value
        
        # run on 8hrs interval
        0 */8 * * * . $HOME/Coding/python/web-scraper-corona/venv/bin/activate && $HOME/Coding/python/web-scraper-corona/venv/bin/python3 /home/chan-dev/Coding/python/web-scraper-corona/twitter-covid19-bot.py >> /tmp/test.txt 2>&1
        
        

        【讨论】:

          猜你喜欢
          • 2021-10-06
          • 2015-09-02
          • 2023-02-08
          • 2021-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-30
          相关资源
          最近更新 更多