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

时间:2017-06-05 01:32:31

标签: node.js bash amazon-web-services pm2

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

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

但是,我想从名为pm2 start app.js的Codedeploy钩子脚本运行applicationstart.sh,该应用程序失败并显示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

这是applicationstart脚本:

#!/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和从启动钩子脚本启动它会有什么区别?

这是直接从ssh:

运行

enter image description here

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

1 个答案:

答案 0 :(得分:1)

在调用pm2启动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