gpt4 book ai didi

当 pm2 从脚本启动时,Node.js 应用程序无法访问任何环境变量,但从 ssh 启动时可以

转载 作者:行者123 更新时间:2023-11-29 09:29:31 26 4
gpt4 key购买 nike

我正在尝试使用 pm2 进程管理器在生产 EC2 服务器上启动 node.js 应用程序。

当我通过 ssh 进入实例并运行 pm2 start app.js 时,PM2 启动正常并且可以访问所有环境变量。一切都很好。

但是,我想从名为 applicationstart.sh 的 Codedeploy Hook 脚本运行 pm2 start app.js,应用程序失败并显示 errored 状态,因为它缺少所有环境变量。 enter image description here

这里是添加脚本的地方,因此每次部署都会启动它并调用 pm2 start: appspec.yml

version: 0.0
os: linux
files:
- source: /
destination: /home/ubuntu/teller-install
hooks:
AfterInstall:
- location: scripts/afterinstall.sh
timeout: 1000
runas: root
ApplicationStart:
- location: scripts/applicationstart.sh
timeout: 300
runas: ubuntu

这是应用程序启动脚本:

#!/bin/bash

echo "Running Hook: applicationstart.sh"
cd /home/ubuntu/teller-install/Server/
pm2 start app.js
exit 0

当我从 ssh 运行脚本时,我以 ubuntu 身份登录,并且我在 appconfig.yml 中设置脚本也以 ubuntu 身份运行。

为什么从终端启动 pm2 和从启动 Hook 脚本启动 pm2 会有什么不同?

这里是直接从 ssh 运行:

enter image description here

我可以提供任何急需解决方案所需的信息。谢谢!

最佳答案

在调用 pm2 start app.js 加载环境变量之前,我必须添加 source/etc/profile

脚本现在看起来像

#!/bin/bash

echo "Running Hook: applicationstart.sh"
cd /home/ubuntu/teller-install/Server/
source /etc/profile
pm2 start app.js
exit 0

关于当 pm2 从脚本启动时,Node.js 应用程序无法访问任何环境变量,但从 ssh 启动时可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44360549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com