如何让部署在PythonAnywhere免费版的Telegram Bot持续运行?
解决PythonAnywhere免费计划中Telegram Bot自动停止的问题
问题原因
- PythonAnywhere免费账户的控制台/后台脚本有运行时长限制,普通控制台脚本最多持续运行几小时就会被系统自动终止;免费后台任务每日总运行时长也有限制(通常为5小时)。
- 若通过web应用部署Bot(使用webhook),免费web应用在连续1小时无外部请求时会进入休眠状态,导致Bot无法响应新消息。
可行解决方案
改用Webhook模式替代Polling模式
轮询模式(如updater.start_polling())需要脚本持续运行,很容易触发免费计划的时长限制。换成webhook模式后,只有当用户和Bot交互时,Telegram才会向你的PythonAnywhere地址发送请求,既能避免持续占用资源,又能在有请求时自动唤醒休眠的web应用。
简化示例代码:from flask import Flask, request import telegram app = Flask(__name__) BOT_TOKEN = "你的Telegram Bot Token" bot = telegram.Bot(token=BOT_TOKEN) @app.route('/telegram-webhook', methods=['POST']) def handle_webhook(): update = telegram.Update.de_json(request.get_json(force=True), bot) # 处理消息逻辑示例 if update.effective_message: chat_id = update.effective_chat.id bot.send_message(chat_id=chat_id, text="消息已收到") return 'OK' if __name__ == '__main__': # 设置webhook地址,必须是HTTPS bot.set_webhook(url="https://你的PythonAnywhere用户名.pythonanywhere.com/telegram-webhook") app.run()注意:PythonAnywhere免费计划提供的默认域名是HTTPS的,直接使用即可满足Telegram的webhook要求。
定时唤醒Web应用
若Bot长时间无用户交互,web应用仍会休眠。可以在PythonAnywhere的「Tasks」页面添加定时任务,每隔50分钟向你的webhook地址发送一次GET请求,保持应用活跃。
定时任务命令示例:curl https://你的PythonAnywhere用户名.pythonanywhere.com/telegram-webhook免费账户每日最多可执行100次定时任务,这个频率足够维持应用不进入休眠。
定时重启Polling脚本(备选)
如果坚持使用Polling模式,可通过定时任务每日多次重启Bot脚本,规避单任务时长限制。在「Tasks」页面添加重复执行的任务,命令如下:python3 /home/你的用户名/你的Bot脚本路径/bot.py这种方式的缺点是脚本重启期间Bot无法响应消息,稳定性不如Webhook模式。
内容的提问来源于stack exchange,提问作者Lord.Aslan
相关产品推荐
相关产品推荐

