AWS EC2 启动配置用户数据 - 找不到命令

Posted

技术标签:

【中文标题】AWS EC2 启动配置用户数据 - 找不到命令【英文标题】:AWS EC2 Launch configuration user data - command not found 【发布时间】:2017-12-25 02:39:12 【问题描述】:

对于 AWS EC2 (Amazon Linux) 启动配置,我设置了一些用户数据,其中包含一些命令序列,如下所示。

#!/bin/bash -exv \n", 
"#Execute Init resource\n", 
"whoami\n", 
"pwd\n", 
"npm -v\n",

在实例启动时,用户数据执行良好,并且像“whoami”这样的本机命令在 cloud-init-output.log 中给出了正确的输出,但是它给出了错误的 npm 命令错误消息,例如“未找到 npm 命令”。

但是,当我 ssh 到实例并尝试执行一些 npm 命令时,它工作正常。

有人可以指导我解决这个问题吗?

谢谢

【问题讨论】:

您使用的是什么 AMI? 你能尝试给出npm的完整路径吗? 您是将此用户数据作为 CloudFormation 模板的一部分,还是在 EC2 启动向导中指定? @danielbh 我基于 Amazon Linux AMI 创建了自己的 AMI。 @JohnRotenstein 是的,我已将用户数据作为 CF 模板的一部分。 【参考方案1】:

@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。

希望这会有所帮助。

【讨论】:

“所以我在我的用户数据脚本中获取了 .bash_profile”。这是否意味着在用户数据脚本中添加“source ~/.bash_profile”。对不起,我不精通脚本所以问这个问题,但我在 npm 方面遇到错误【参考方案2】:

用户数据以root 执行。 npm 的路径可能不在rootPATH 中。指定npm 的完整路径,它应该可以工作。

ssh 起作用的原因是npm 在您的PATH 中可用。

【讨论】:

这是正确的原因。我错过了关于 ssh 的部分。删除了我的答案。 谢谢@helloV。我会试试这个。您能帮我理解为什么 PATH 在实例启动时对“root”用户不可用,而同一用户可以通过 ssh 使用它吗? 嗨@helloV 和所有,只是一个更新,我更新了我的用户数据脚本,其中包含一条打印路径的语句。即 echo $PATH ,当我查看 cloud-init-output.log 时,我可以看到此语句输出为“/sbin:/usr/sbin:/bin:/usr/bin”,并且当我执行“echo $”时在 ssh 终端中输出PATH”我可以看到“/root/.nvm/versions/node/v6.11.1/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin”

以上是关于AWS EC2 启动配置用户数据 - 找不到命令的主要内容,如果未能解决你的问题,请参考以下文章

aws ec2 - 用bash命令运行python uwsgi继续返回 - 找不到python应用程序

AWS Java SDK - 在 EC2 实例上使用 SSM 运行命令

如何修复 apt-get: 在 AWS EC2 上找不到命令? [关闭]

AWS CloudFormation 模板“找不到启动配置名称”

AWS账户之间的克隆/传输EC2实例(AMI)

如何在 AWS EC2 弹性 beantalk 中使用命令