对于AWS EC2(Amazon Linux)启动配置,我设置了一些userdata,其中包含一些命令序列,如下所示。
#!/bin/bash -exv \n",
"#Execute Init resource\n",
"whoami\n",
"pwd\n",
"npm -v\n",
在实例启动时,用户数据正在执行,并且像“whoami”这样的本机命令在cloud-init-output.log中提供了正确的输出,但它为npm命令提供了错误,并显示错误消息,如“找不到npm命令”。
但是,当我ssh到实例并尝试执行一些npm命令时,它工作正常。
有人可以指导我解决这个问题吗?
由于
答案 0 :(得分:6)
用户数据以root
执行。 npm
root
的路径可能不在PATH
的{{1}}中。指定npm
的完整路径,它应该有效。
ssh
之所以有效,是因为npm
中有PATH
。
答案 1 :(得分:0)
@ helloV的答案很好。感谢@helloV。 尽管如此,我试图在实例启动期间找到更多关于root用户的PATH问题,并且我发现我的AMI中的NVM(节点版本管理器)包的nvm.sh扩展了PATH以添加“npm”和“node”的路径。
这个nvm.sh是从.bash_profile - >触发的。 .bashrc中
有一点很清楚,在实例启动期间执行用户数据脚本之前,没有执行root用户的.bash_profile。所以我在我的用户数据脚本中提供了.bash_profile,现在用户数据脚本中的更多npm命令工作正常。
在https://github.com/creationix/nvm/issues/381中找到nvm.sh的详细信息 感谢Ben Creasy。
希望这有帮助。