【问题标题】:CodeDeploy PM2 Command Not Found未找到 CodeDeploy PM2 命令
【发布时间】:2017-01-24 00:55:20
【问题描述】:

我正在尝试使用 AWS CodeDeploy 来部署我的应用程序。一切似乎都运行良好,但我收到以下错误。

[stderr]/opt/codedeploy-agent/deployment-root/f1ea67bd-97bo-08q1-b3g4-7b14becf91bf/d-WJL0QLF9H/deployment-archive/scripts/start_server.sh: 第 3 行:pm2:找不到命令

下面是我的 start_server.sh 文件。

#!/bin/bash
pm2 start ~/server.js -i 0 --name "admin" &

我尝试使用 SSH 以 ubuntu 用户身份连接到我的服务器并运行该 bash 文件,它可以完美运行,没有错误。所以我知道 PM2 已在该用户上安装并正常工作。

下面也是我的 appspec.yml 文件。

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu
hooks:
  ApplicationStart:
    - location: scripts/start_server.sh
      timeout: 300
      runas: ubuntu
  ApplicationStop:
    - location: scripts/stop_server.sh
      timeout: 300
      runas: ubuntu

也不确定这是否会有所帮助,但这是我的 stop_server.sh 文件。

#!/bin/bash
npm install pm2 -g
pm2 stop admin || true
pm2 delete admin || true

有什么想法吗?

【问题讨论】:

    标签: node.js linux bash npm aws-code-deploy


    【解决方案1】:

    执行以下步骤:

    1. 哪个节点
    2. sudo ln -s /home/ubuntu/.nvm/versions/node/v12.13.1/bin/node(上述步骤的输出)/usr/bin/node
    3. 哪个下午2
    4. sudo ln -s /home/ubuntu/.nvm/versions/node/v12.13.1/bin/pm2(上述步骤的输出)/usr/bin/pm2

    在 start_server.sh 和 stop_server.sh 中使用它如下(以 ubuntu 运行 start.sh):

    sudo /usr/bin/pm2 status
    

    希望对你有帮助!!

    【讨论】:

      【解决方案2】:

      我又遇到了这个问题。

      我能够通过确保以下代码在我的 所有我的 CodeDeploy 脚本文件的开头运行来解决它。

      export NVM_DIR="$HOME/.nvm"
      [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
      

      【讨论】:

      • 这是否等同于调用source ~/.bashrc,因为这些行已经在~/.bashrc 中? source ~/.bashrc 由于某种原因没有工作
      • @Abhilashk 我觉得它应该是等价的,但我也相信我试过了,但由于某种原因它不起作用。也许其他人会有更多的洞察力,但我不是 100% 确定。
      【解决方案3】:

      如果你运行

      npm install pm2 -g
      

      ApplicationStop 步骤中,直到您第二次部署时才会运行它,因为ApplicationStop 在上一个部署存档包上运行。

      【讨论】:

      • 我认为这实际上是我的问题。很高兴知道以防我再次遇到它。谢谢!
      【解决方案4】:

      通常在这种情况下使用 pm2 的完整路径。

      #!/bin/bash
      /usr/local/bin/pm2 start ~/server.js -i 0 --name "admin" &
      

      【讨论】:

        【解决方案5】:

        如果有脚本要运行,所有生命周期事件都会按顺序发生:

        1. 应用程序停止
        2. DownloadBundle(为 CodeDeploy 保留)
        3. 安装前
        4. 安装(为 CodeDeploy 保留)
        5. 安装后
        6. 应用程序启动
        7. 验证服务

        如果您的部署已经到达 ApplicationStart 步骤,这意味着您的 ApplicationStop 生命周期事件已经成功。你能确定“pm2 stop admin”是否成功(意味着安装了pm2)。

        【讨论】:

        • 不太确定如何检查。这是一个非常奇怪的错误。
        猜你喜欢
        • 1970-01-01
        • 2016-11-06
        • 2023-03-16
        • 2018-03-19
        • 2020-09-30
        • 1970-01-01
        • 2021-12-07
        • 2022-01-15
        • 1970-01-01
        相关资源
        最近更新 更多