当尝试在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/nodewhich 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)
但是,只发出nvmI 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?我不明白发生了什么,它以前工作过。