【问题标题】:AWS CodeDeploy failing in AfterInstall due to ScriptTimedOut由于 ScriptTimedOut,AWS CodeDeploy 在 AfterInstall 中失败
【发布时间】:2021-04-19 18:56:26
【问题描述】:

我已将 AWS 连接到 github

appspec.yml

version: 0.0
os: linux
files:
  - source: /
    destination: /home/mybot
hooks:
  AfterInstall:
    - location: RunMyBot.sh
      timeout: 300
      runas: root

RunMyBot.sh

#!bin/bash

cd /home/mybot/
yum install -y python3-pip python3 python3-setuptools
sudo python3 -m pip install --user --upgrade pip
pip3 install -r requirements.txt
python botMain.py

错误:

我想运行我的主文件 - botMain.py,但它没有运行。

我尝试从脚本中删除安装行,因为它说它们已经安装,但我仍然超时并且我的 botMain.py 没有运行。

【问题讨论】:

  • botMain.py 是做什么的?是不是像服务器一样,只是在运行并等待连接?
  • @Marcin 是的,它是唯一包含 python 代码的文件

标签: python amazon-web-services aws-code-deploy


【解决方案1】:

应该是python3,而不是python。但无论如何,您的部署会挂起,因为如果 botMain.py 是服务器,它只会启动而不会完成。因此,CD 超时等待 botMain.py 完成其执行,而这从未发生过。

要正确运行您的botMain.py,您应该运行它一个守护进程服务。为此,您可以在 linux 上为 systemd 创建自定义单元文件。其中一个例子是here

【讨论】:

  • 那么,我需要为 BeforeInstall 创建另一个脚本吗?我添加了您提供的链接中的代码以及我自己的 RunMyBot.sh 路径。但是,我遇到了同样的错误 - ScriptTimedOut。还有警告:[stderr]Vim:警告:输出不是终端 [stderr]Vim:警告:输入不是来自终端
  • @DeadPool 你不能按照你的方式运行你的代码,因为它会挂起。正如我所解释的,您必须创建一个 systemd 服务。你试过吗?
  • 是的,我做到了。我在我的 RunMybot.sh 中添加了 systemd 行。我尝试使用另一种方式,之前我添加了 ApplicationStop 但后来将其删除。在部署期间,它现在正在尝试查找我用于 ApplicationStop 的文件,该文件不存在。我在网上找到了一些解决方案,但没有一个有效。当我尝试重新启动代码部署时,它给了我错误-“无法获得 D-Bus 连接:不允许操作”。它找不到代码部署。 (stackoverflow.com/questions/67193222/…)
猜你喜欢
  • 2016-04-11
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 2021-02-10
  • 1970-01-01
相关资源
最近更新 更多