You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让部署在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:59:52