我正在尝试使用pm2进程管理器在生产EC2服务器上启动node.js应用程序。
当我进入实例并运行pm2 start app.js
时,PM2启动很好并且可以访问所有环境变量。一切都很好。
但是,我想从名为pm2 start app.js
的Codedeploy钩子脚本运行applicationstart.sh
,该应用程序失败并显示errored
状态,因为它缺少所有环境变量。
以下是添加脚本的位置,以便在每次部署时启动并调用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:
运行我可以提供急需解决方案所需的任何信息。谢谢!
答案 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