无法从 cron 作业中找到 dotenv 环境变量
Posted
技术标签:
【中文标题】无法从 cron 作业中找到 dotenv 环境变量【英文标题】:Can't find dotenv environment variables from cron job 【发布时间】:2020-10-23 09:30:09 【问题描述】:我正在从 python 库运行 python 脚本,该脚本使用 dotenv 从库根目录中的 .env 文件加载一些环境变量。
这可以从命令行运行,但是当我尝试使用以下命令作为 cronjob 运行时:
* * * * * source ./path_to_venv/activate; python ./path_to_script.py
我收到一个关键错误,因为它找不到环境变量。
任何想法为什么这不起作用?
非常感谢您的帮助!
【问题讨论】:
【参考方案1】:如果您使用dotenv
s 默认配置路径,它会从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
【讨论】:
以上是关于无法从 cron 作业中找到 dotenv 环境变量的主要内容,如果未能解决你的问题,请参考以下文章
你怎么得到运行Node.js脚本的cron作业从.env文件中读取变量?