在树莓派上的Node JS脚本中读取环境变量时出错

时间:2018-10-21 12:13:00

标签: node.js raspberry-pi

我是第一次使用pi和raspbian编程。我正在使用这个程序包(node-ig-api)用node js编写一个小项目,我从Windows 10 pc开始,现在转移到可以在raspberry pi 1(armV6)上永久运行。设法将raspbian和node js安装到pi上,并且在设置程序所需的环境变量后可以正常运行node js脚本。下一步是使脚本在启动时永久运行。尝试根据此帖子daemonizing node js设置服务,我的脚本如下所示:

[Unit]
Description=IG Automated Trader

[Service]
WorkingDirectory=/home/pi
ExecStart=/usr/local/bin/node /home/pi/igAutomatedTrader.js
Restart=always
RestartSec=10
#User=nobody
#Group=nobody
#Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production


[Install]
WantedBy=multi-user.target

我将服务脚本放在文件夹中:

/etc/systemd/system

然后我设置环境变量,例如:

export IG_API_KEY=<api key>

然后我可以使用printenv命令查看所有列出的内容。然后,我使用命令来运行服务:

sudo systemctl daemon-reload 
sudo systemctl start igAutomatedTrader
journalctl -u igAutomatedTrader

我可以看到该服务正在启动,它们正在停止,并出现以下错误:

错误:setHeader(“ X-IG-API-KEY”,value)中需要“ value”

我已经在ig节点包中跟踪了设置此值的代码部分:

let headers = {
    'Content-Type': 'application/json; charset=UTF-8',
    'Accept': 'application/json; charset=UTF-8',
    'X-IG-API-KEY': process.env.IG_API_KEY
};

我无法弄清楚为什么手动启动时脚本可以工作,但作为服务运行时却不能。猜测它与路径或权限问题有关,但通过堆栈溢出和raspberry pi论坛进行搜索,但找不到解决方案,这很可能是由于我对raspbian OS缺乏了解。值得一提的是,我也尝试过让pm2运行脚本,但遇到相同的错误。

非常感谢任何指针。

1 个答案:

答案 0 :(得分:0)

发生错误是因为在将Nodejs脚本作为服务运行时未定义IG_API_KEY环境变量。

要定义环境变量,请向服务文件中添加Environment="IG_API_KEY=<api key>"

如果您有更多环境变量,则可以创建环境配置,并通过添加.service

EnvironmentFile=<pathToEnvironmentFile>文件中指定路径。