我正在使用ec2实例的用户数据来启动我的自动伸缩实例并运行该应用程序。我正在运行节点js应用程序。
但是它不能正常工作。我已经调试并检查了实例云监视器的输出。所以说
pm2 command not found
经过大量研究和调查,我发现以root身份出现的命令路径不存在。
作为EC2用户数据,当它尝试运行时会找到路径
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
ssh
作为ec2用户之后是
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
ssh
为sudo su
后是
/root/.nvm/versions/node/v10.15.3/bin:/sbin:/bin:/usr/sbin:/usr/bin
它仅适用于最后一条路径。
那么在启动由用户数据提供的实例期间以root身份运行命令的方式或脚本是什么?
答案 0 :(得分:0)
不建议所有使用用户数据启动应用程序的想法,因为根据AWS文档,他们不保证实例仅在成功执行用户数据后才会出现。即使用户数据失败,它也会启动您的实例。
对于您的问题,我假设您提供二进制的完整绝对路径,它将起作用。
/root/.nvm/versions/node/v10.15.3/bin/pm2
使用这种方法更好的解决方案,为应用程序启动创建服务文件,并使用systemd或service启动应用程序。