如何让运行 Node.js 脚本的 cron 作业从 .env 文件中读取变量?

Posted

技术标签:

【中文标题】如何让运行 Node.js 脚本的 cron 作业从 .env 文件中读取变量?【英文标题】:How do you get cron job running Node.js script to read variables from .env file? 【发布时间】:2017-10-25 05:26:12 【问题描述】:

我目前有一个运行 Node.js 脚本的 cron 作业设置。 Node.js 脚本使用dotenv 包来读取具有一些API 密钥的.env 文件。

当我从命令行运行 Node.js 脚本时,变量会从 .env 文件中正确读取并与我的 Node.js 脚本一起使用。

但是当 cron 运行 Node.js 脚本时,我尝试设置的变量返回未定义。

00 05 * * * /home/michaellee/.nvm/versions/node/v6.10.0/bin/node /home/michaellee/index.js >> /home/michaellee/output.log

.env 文件与index.js 文件位于同一级别。

cron 作业是使用来自用户 michaelleecrontab -e 设置的,该用户在 Ubuntu 上拥有文件。

【问题讨论】:

【参考方案1】:

我只是更改了 dotenv 配置上的路径,它对我有用

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

【讨论】:

非常好!我很高兴能帮助你! :) 刚遇到这个问题,并应用此修复程序取得了巨大成功。谢谢!谁能解释为什么这是必要的?与手动运行相比,cron 在运行我的脚本时有何不同?【参考方案2】:

我认为从.env 文件中取出内容并将它们加载到 JSON 文件中会不会那么令人头疼。然后,您只需 require JSON 文件并加载数据。每个 & 都不需要任何插件,它可以与 Cron 无缝工作。

【讨论】:

感谢@Colby 的建议!我试了一下,效果非常好。我担心将 API 密钥放在 JSON 文件中。然后我意识到,我只需要忽略它,让它永远不会被版本化。 不客气,我很高兴它对你有用!我发现任何 Node 通常在使用 JSON 格式时效果最好。祝你好运!

以上是关于如何让运行 Node.js 脚本的 cron 作业从 .env 文件中读取变量?的主要内容,如果未能解决你的问题,请参考以下文章

你怎么得到运行Node.js脚本的cron作业从.env文件中读取变量?

运行 cron 作业 (Node.js) 时如何在 Amazon Elastic Beanstalk 中设置环境变量?

当代码在其他文件中时如何运行 Cron 作业 - Node JS

如何在Node.js中管理Cron作业

如何让 NGINX 从 cron 作业重新启动/重新加载?

在 Node.js 与 Cron 作业中设置间隔?