如何使用 Firebase 运行 cron 作业?

IT技术 javascript cron firebase
2021-02-22 10:56:24

我正在尝试使用 Firebase 运行 cron 作业。基本上,我需要运行一个函数,该函数每天在太平洋标准时间凌晨 12:00 进行大量 API 调用并将数据推送到 firebase。有没有办法让我在 Firebase 的服务器端做到这一点?

我看到这里有这个module但我根本不明白它是如何工作的。如果有人有任何想法或知道上述module如何工作,那就太棒了。

编辑:想法。如果我要创建一个显示功能完成时间的数据条目会怎样。基本上检查一下上次调用和完成函数的时间。如果已经过了中午 12 点,则调用该函数并更新该字段,因此直到第二天才会调用它。这是个好主意吗?我不需要该功能恰好在凌晨 12 点发生,我只需要在第一个用户登录时完成它。

6个回答

在 2019 年 I/O 大会上,它宣布了一项新功能,可以使用 Firebase 功能进行 cronjobs。

看看这个

片段 1

export scheduledFunction = functions.pubsub.schedule(‘every 5 minutes’).onRun((context) => {
  console.log(‘This will be run every 5 minutes!’);
});

片段 2

exports.scheduleJobs = functions.pubsub.
schedule(“every day 03:00”).onRun(async() => {
 // do something
console.log(“All done! See you tomorrow morning!”);
});
终于不需要单独部署到gcloud了!
2021-04-22 10:56:24

上个月 Firebase 发布了 Cloud Functions。

在那里,您可以根据不同的钩子触发类似 lambda 的函数:Pub/Sub 事件、HTTP 事件……他们计划发布一个 cron 钩子,您可以在其中使用 cron 规则触发特定函数。它尚未发布,但同时您可以使用Google App Engine

可惜它只适用于 Blaze 定价计划......我还在学习时不太确定是否切换到无上限计费。
2021-04-20 10:56:24
@ego 为此,您可以在谷歌云上创建预算。如果您将预算设置为 0 美元,您肯定不需要支付任何费用。
2021-04-23 10:56:24

Firebase 上没有 cron 作业或计划选项,您必须为此使用另一个平台。这是一个,例如:https ://zapier.com/zapbook/firebase/schedule/

更多信息:在 Firebase 位置更改时全局设置警报的最佳方法

您还可以使用一些在线 cron 作业,只需使用 Google 搜索“在线 cron 作业”即可。基本上,他们只是在指定的时间调用一个 URL。

更新:现在有 cron 作业,见https://stackoverflow.com/a/56063698/757508

要回答有关如何firebase-cron工作的问题

这个module需要在某个地方的服务器上运行,所以它总是打开的。当作业运行时,所有这一切意味着它获取该作业的指定数据并将其放入指定的firebase-queue引用中。作为用户,您将firebase-queue 设置为在数据添加到队列时运行。

您可以通过指定名称、cron 模式和使用以下.addJob方法添加到队列的数据来添加“cron”作业

cron.addJob('foo', '0 0 0 * * *', {foo: 'bar'}, function(err) {
  if (err) return console.error(err);
  console.log('added foo');
});

使用.run方法启动firebase-cron这会检查作业列表并执行任何需要执行的作业。此方法还需要一个回调函数,每次检查作业时都会调用该函数(我将其用于附加日志记录)

有些东西我想添加到firebase-cron文档中,但还没有完成。我已经在生产环境中使用它一段时间了,并且firebase-cron它本身没有任何问题......只是我的队列逻辑中的用户错误;)

此外,我一直在使用新的 Firebase Cloud Functions,它们很棒。我可能会添加一个功能来触发云功能,而不是使用firebase-queue. 一旦他们的 cron 服务运行,这可能就没有必要了。

方案一

早在 2017 年 3 月,Abe Haskins发表了一篇关于如何利用 Google 的App Engine Cron为 Firebase 安排 Cron 作业的文章。如果您想遵循这种方法,您将需要:

  • git
  • python 2.7
  • python皮
  • 谷歌云 SDK

解决方案2

Jeff Delaney提供了一个关于如何为 Firebase 制作动态 cron 作业的很酷的教程您可以在此处查看

该解决方案的目标是提供动态任务调度,可以根据用户交互在客户端和服务器端进行管理。让我们考虑一些用例:

  • 预定或可暂停的提醒通知
  • 发送生日快乐推送通知
  • 注册后 24 小时发送欢迎电子邮件
  • 如果由于错误而失败,则重试任务

解决方案3

最后,您还可以使用免费的第三方 cron 作业服务,例如cron-job.org它看起来非常简单,它为您提供:

  • 每小时执行速度高达 60 次
  • 状态通知
  • 执行历史

希望其中一些会有所帮助。