CodeDeploy 仅成功一次

问题描述 投票:0回答:1

我正在尝试使用 CodeDeploy 在 AWS EC2 实例上部署用 Java 编写的 Discord 机器人。

我安装了 CodeDeploy 代理并尝试部署,效果很好。但是,当我再次尝试部署时,出现此错误:

整体部署失败,因为太多单个实例部署失败、可供部署的健康实例太少、或者部署组中的某些实例遇到问题。

当我检查事件日志时,第一步失败了

ApplicationStop

LifecycleEvent - ApplicationStop
Script - stop_bot.sh
[stderr]java: no process found

这是我的 appspec.yml:

version: 0.0
os: linux
files:
  - source: /DuoCord-0.1.jar
    destination: /tmp
hooks:
  ApplicationStart:
    - location: start_bot.sh
      timeout: 300
      runas: root
  ApplicationStop:
    - location: stop_bot.sh
      timeout: 300
      runas: root

start_bot.sh:

nohup java -jar /tmp/DuoCord-0.1.jar dev.rifaii.Main /dev/null 2> /dev/null < /dev/null &

stop_bot.sh:

killall -9 java

我尝试卸载 codedeploy-agent 并再次安装,部署成功,但在第二次尝试时再次出现相同的错误

java amazon-web-services aws-code-deploy
1个回答
0
投票

当没有 Java 进程运行时,我的 stop_bot.sh 似乎会失败,并且在安装 CodeDeploy 后的第一次部署中,它没有运行 ApplicationStop,这就是它成功的原因。

我用这个替换了我的 stop_bot.sh 脚本:

#!/bin/bash

# Check if any Java processes are running
java_pids=$(pgrep java)

if [ -n "$java_pids" ]; then
  # Stop all Java processes
  for pid in $java_pids; do
    kill -9 "$pid"
    echo "Java process stopped (PID: $pid)"
  done
else
  echo "No Java processes found"
fi

并启动_bot.sh:

nohup java -jar /tmp/DuoCord-0.1.jar dev.rifaii.Main

这解决了问题

© www.soinside.com 2019 - 2024. All rights reserved.