如何防止我的 bot 在 Heroku 上掉落 asleep/idiling!?,Cronjob 在 bot 开始轮询后不执行?
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 functions
、start_polling
和 cronjob
但是因为我先执行 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()
如果 30 分钟没有传入 HTTP 请求,Web 测功机将进入休眠状态。你无法以任何方式阻止它(即 运行 一些后台代码)。
您有 2 个选择:
- 通过从外部计划(例如 Kaffeine
执行请求(每 x 分钟)来保持活动状态
- 将 Dyno 转换为
worker
。如果您不需要接收传入的请求(例如,您的 Bot 只是轮询),这是一个很好的解决方案:Dyno 不会休眠,您也不需要使用外部工具。
希望你们一切顺利。
我在 Heroku 上部署了一个电报机器人,但该机器人在 20-30 分钟后就睡着了,
因为我使用的是 Heroku 的免费 dyno
,我试图通过创建一个 cronjob 来防止这种情况
只在控制台打印一些东西来保持机器人清醒。
正如您在下面看到的,我有 2 functions
、start_polling
和 cronjob
但是因为我先执行 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()
如果 30 分钟没有传入 HTTP 请求,Web 测功机将进入休眠状态。你无法以任何方式阻止它(即 运行 一些后台代码)。
您有 2 个选择:
- 通过从外部计划(例如 Kaffeine 执行请求(每 x 分钟)来保持活动状态
- 将 Dyno 转换为
worker
。如果您不需要接收传入的请求(例如,您的 Bot 只是轮询),这是一个很好的解决方案:Dyno 不会休眠,您也不需要使用外部工具。