如何解决Google Cloud App Engine频繁重启Discord Python Bot的问题?
解决Discord Bot部署至GAE后自动重启的问题
问题根源
Google App Engine(GAE)标准环境默认将应用视作HTTP Web服务,要求进程必须监听PORT环境变量指定的端口,并响应健康检查请求(如GET /)返回200-299或404状态码。你的Discord Bot是长连接后台进程,未处理HTTP请求,导致GAE判定进程启动失败,每隔约10分钟触发一次重启。
解决方案
在Bot代码中添加轻量HTTP服务器,专门处理GAE的健康检查请求,同时让Bot在后台运行。
步骤1:修改Bot代码
以Flask为例(也可使用Python内置http.server),在bot.py中加入HTTP服务逻辑:
import os import threading from flask import Flask import discord # 初始化Flask用于健康检查 app = Flask(__name__) @app.route('/') def health_check(): return "Bot is running", 200 # 你的Discord Bot核心逻辑 intents = discord.Intents.default() intents.message_content = True # 根据Bot功能需求调整权限 client = discord.Client(intents=intents) @client.event async def on_ready(): print(f"已登录为 {client.user}") # 后台启动HTTP服务 def run_http_server(): port = int(os.environ.get('PORT', 8080)) # GAE会自动设置PORT环境变量 app.run(host='0.0.0.0', port=port) if __name__ == "__main__": # 启动HTTP服务守护线程(随主进程退出) http_thread = threading.Thread(target=run_http_server) http_thread.daemon = True http_thread.start() # 启动Discord Bot client.run("你的Discord Bot Token")
步骤2:更新依赖
在requirements.txt中添加Flask依赖(使用Flask时需要):
discord.py>=2.3.0 flask>=2.3.0
步骤3:重新部署
将修改后的代码重新部署至GAE,此时进程会同时运行HTTP服务和Discord Bot,满足GAE健康检查要求,不会再被强制重启。
补充说明
- 若不想引入Flask依赖,可改用Python内置
http.server模块实现极简HTTP服务,无需额外安装包。 - 你的
app.yaml配置无需修改,manual_scaling: instances:1已设置固定运行1个实例,避免自动缩放带来的额外问题。
内容的提问来源于stack exchange,提问作者Karan
相关产品推荐
相关产品推荐

