簡體   English   中英

如何防止我的機器人在 Heroku 上入睡/閑置?,? 機器人開始輪詢后 Cronjob 沒有執行?

[英]How can I prevent my bot to fall asleep/idiling on Heroku!?, Cronjob is not executing after bot starts polling?

希望你們一切順利。 我有一個電報機器人,我在 Heroku 上部署了一個電報機器人,但是機器人在 20-30 分鍾后睡着了,因為我使用的是 Heroku 的免費dyno ,我試圖通過創建一個 cronjob 來防止這種情況,它只在控制台中打印一些東西來保持機器人醒了。

正如您在下面看到的,我有2 functionsstart_pollingcronjob ,但由於我先執行start_polling ,因此無法執行cronjob

我可以在這里使用任何技巧來防止我的機器人入睡嗎?

import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'telega.settings')
django.setup()

from main.bot import bot
from crontab import CronTab
from datetime import datetime
from apscheduler.schedulers.blocking import BlockingScheduler

def cronjob():
    """ Main cron job to prevent bot fall asleep. """
    print("Cron job is running, bot wont fall asleep")
    print("Tick! The time is: %s" % datetime.now())

def start_polling():
    """ Starts the bot """
    try:

        bot.skip_pending = True
        print(f'Bot {bot.get_me().username} started')
        bot.polling()
    except Exception as e:
        print(e)
        
# 1. Start polling
start_polling()

# 2. Start the scheduler ==> Prevent bot to fall asleep
scheduler = BlockingScheduler()
scheduler.add_job(cronjob, "interval", seconds=300)
scheduler.start()

Web 測功機將 go 在 30 分鍾后休眠,而不會收到 HTTP 請求。 您不能以任何方式阻止這種情況(即運行一些后台代碼)。

您有 2 個選項:

  • 通過執行來自外部計划(如Kaffeine )的請求(每 x 分鍾)使其保持活動狀態
  • 將 Dyno 轉換為worker 如果您不需要接收傳入請求(例如您的 Bot 僅輪詢),這是一個很好的解決方案:Dyno 不會休眠,您不需要使用外部工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM