在从 requirements.txt 安装软件包之前运行脚本

在从 requirements.txt 安装软件包之前运行脚本

我的应用程序有一些先决条件,这意味着只有运行几个脚本后,要求的安装才会起作用。

我一直在阅读自定义 Python 容器的文档但它并没有完全说明如何控制 .ebextensions 中的脚本何时运行,而且我所做的所有测试都表明这种情况确实会发生应用程序已部署,或者至少在使用 pip 安装 requirements.txt 中的包之后。

AWS 论坛上的这篇文章建议创建一个脚本,并将其文件名插入到 hooks 文件夹中,但这显然不推荐:

将文件直接放入钩子目录中是有风险的,因为这不是记录的方法,在某些容器中有所不同,并且将来可能会发生变化。

我想知道是否有人成功设置在 requirements.txt 文件之前运行的脚本,如果是的话我可能做错了什么。

这是我的 .ebextensions 文件:

packages:
  yum:
    # packages needed for my app

files:
    "/home/ec2-user/setup-script.sh":
        mode: "00755"
        owner: ec2-user
        group: ec2-user
        encoding: plain
        content: |
            #!/bin/bash
            echo $(date -u) >> /tmp/debug.log
            echo "Running as $(whoami)" >> /tmp/debug.log
            # rest of script
commands:
    01-setup-script:
        command: "sh -x /home/ec2-user/setup-script.sh"

部署在安装要求的过程中停止,并且似乎没有运行脚本,或者更新用户文件夹中存在的脚本。

答案1

好吧,事实证明剧本确实先于其他所有操作运行。看来脚本本身存在错误,这意味着它无法正确运行,这就是它无法正确设置实例的原因!

我通过查看输出发现了这一点/var/log/eb-activity.log

set -e所以我想总是要仔细检查脚本的输出!在脚本顶部添加不会有什么坏处,这样当遇到错误时它会停止执行。

相关内容