为什么我的 AWS CodeDeploy 运行 我的脚本在部署后无法使用?

Why won't my AWS CodeDeploy run my script after deployment?

我正在使用 CodeDeploy 将我的应用程序部署到由 Auto Scaling 组创建的 EC2 实例。

应用程序部署良好并移动到正确的文件映射位置,但是我的 AfterInstallation 脚本从未执行过。我可以在日志中看到它试图使脚本可执行并通过该阶段,但它从未执行过。

这是我的 appspec.yml

version: 0.0
os: linux
files:
  - source: /
    destination: /opt/lobby
hooks:
  AfterInstall:
    - location: bootstrap.sh
      timeout: 30
      runas: root

这是脚本

#!/bin/bash
nohup nodejs lobby.js &
echo "finished"

我没有看到打印的回显,也没有看到任何与 lobby.js 相关的进程 运行。我可以通过在部署后键入 ./bootstrap.sh 来验证此脚本是否正常工作,并且工作正常。这个钩子应该为我做这个。

这需要是一个后台任务,因为我将在这个脚本中 运行 多个应用程序,但现在只显示一个只是为了让它工作。


编辑:

我参考了 http://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html#appspec-hooks-server 并尝试用 ValidateService 和 AfterAllowTraffic 替换 AfterInstall(但我没有使用 LoadBalancer)

问题

为什么我的 AfterInstallation 脚本没有被调用,或者看起来是这样?

AfterInstall:AfterInstall 脚本包含安装应用程序后需要执行的任务。

安装前脚本示例:

#!/bin/bash
cd /home/ubuntu/production/weone-backend
sudo chown -R ubuntu:ubuntu /home/ubuntu/production
sudo NODE_ENV=production nohup nodejs app.js > /dev/null 2> /dev/null < /dev/null &

在上面的脚本中,我们正在更改应用程序文件夹的所有权 & 开始申请程序。

注意:使用“/dev/null 2> /dev/null < /dev/null &”自动退出 nohup shell,否则您的 CodeDeploy 将卡在 AfterInstall 事件中。

https://www.oodlestechnologies.com/blogs/AWS-CodeDeploy