bash - AWS CodeDeploy [stderr]/usr/bin/env: node: No such file or directory
问题描述
当尝试在AfterInstall
我收到的事件上运行脚本时:
LifecycleEvent - AfterInstall
Script - deploy/install_dependencies.sh
[stdout]Install dependencies. /
[stderr]/usr/bin/env: node: No such file or directory
,这很奇怪,因为:
which node
产量:~/.nvm/versions/node/v15.2.0/bin/node
which npm
产量:~/.nvm/versions/node/v15.2.0/bin/npm
appspec.yml不是我设置的,但我认为它很简单:
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/deploy/
permissions:
- object: /
pattern: "**"
owner: ec2-user
hooks:
AfterInstall:
- location: deploy/install_dependencies.sh
- location: deploy/build.sh
- location: deploy/install_prd_dependencies.sh
- location: deploy/copy_overwrite.sh
# - location: deploy/migrations.sh
timeout: 300
runas: ec2-user
ApplicationStart:
- location: deploy/start_server.sh
timeout: 300
runas: ec2-user
阅读此内容后,我添加runas: ec2-user
了permissions
键及其值:Start Node Application in AfterInstall Hook
,虽然不是同一个问题,但似乎可以解决我的问题,但事实并非如此。
我检查是否nvm
已安装发行which nvm
,它没有工作:
[ec2-user@my-ip ~]$ which nvm
/usr/bin/which: no nvm in (/home/ec2-user/.nvm/versions/node/v15.2.0/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin)
但是,只发出nvm
I recevienvm
的 CLI 帮助命令没有任何问题。
我检查了.bashrc
是否ec2-user
正确导出了 nvm(如本答案中所建议的那样):
# User specific aliases and functions
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
所有脚本都使用 npm/node 二进制文件的绝对路径,示例:
install_dependencies.sh
#!/bin/bash
echo "Install dependencies. $(pwd)"
cd /home/ec2-user/deploy/
/home/ec2-user/.nvm/versions/node/v15.2.0/bin/npm install
启动服务器.sh
#!/bin/bash
echo "Restarting servers..."
/home/ec2-user/.nvm/versions/node/v15.2.0/bin/pm2 restart 0
codedpeloy 是否使用root
用户发出这些命令,即使runas
设置为ec2-user
?我不明白发生了什么,它以前工作过。
解决方案
这归结为执行时不可用的节点路径。如果 node 是通过 nvm 安装的,请尝试添加正确的路径。
另一种方法是添加source ~/.nvm/nvm.sh
到您的 bash 配置文件(或适当的文件,具体取决于您的环境)。请参阅节点版本管理器安装 - 未找到 nvm 命令
推荐阅读
- php - 如何从表单中获取价值并在 WordPress 的 functions.php 文件中对其进行处理?
- c# - 关于使用服务器资源管理器将 Visual Studio 连接到 mysql 和实现发布请求之间的应用差异的问题
- javascript - 在 jQuery.ajax() 中重写 fetch 函数
- amazon-web-services - AWS S3 创建一个策略以在继续放入同一对象时仅保留最新的 2 个对象
- sql - 在对它们进行一些操作后返回记录
- javascript - 使用下拉列表更改单独表格单元格中的多个值
- clips - 即使在 WM 中有事实,规则也不会触发
- linux - FreeBSD syncookies 机制
- c - 为什么我的代码拒绝比较生成的哈希
- python - 如何将具有深度级别的导航列表转换为父子平面列表?