我是第一次使用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运行脚本,但遇到相同的错误。
非常感谢任何指针。
答案 0 :(得分:0)
发生错误是因为在将Nodejs脚本作为服务运行时未定义IG_API_KEY
环境变量。
要定义环境变量,请向服务文件中添加Environment="IG_API_KEY=<api key>"
。
如果您有更多环境变量,则可以创建环境配置,并通过添加.service
EnvironmentFile=<pathToEnvironmentFile>
文件中指定路径。