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
的路径可能不在root
的PATH
中。指定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 上找不到命令? [关闭]