我正在尝试使用 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 进程运行时,我的 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
这解决了问题