【问题标题】:How to run cron job with Firebase?如何使用 Firebase 运行 cron 作业?
【发布时间】:2016-06-14 17:51:59
【问题描述】:

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

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

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

【问题讨论】:

  • Firebase 仅存储数据 - 要运行 cron 作业,您需要访问自己的服务器。
  • @nathanhleung 我刚刚编辑了问题...您认为这是一个好的解决方案吗?
  • 您仍然需要有一些东西来检查数据输入 - 很可能是您自己的服务器
  • @nathanhleung 我不能在用户登录期间检查前端的条目吗?
  • 嗯,实际上可以,我猜你只需要确保它在用户登录之前运行

标签: javascript cron firebase


【解决方案1】:

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

更多信息:Best way to globally set up alerts for when a Firebase location is changed

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

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

【讨论】:

    【解决方案2】:

    上个月 Firebase 发布了 Cloud Functions。

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

    【讨论】:

    • 遗憾的是,它仅在 Blaze 定价计划中可用...在我仍在学习期间,不太确定是否要切换到无上限计费。
    • @ego 因此你可以在谷歌云上创建预算。如果您将预算设置为 0 美元,您肯定不需要支付任何费用。
    【解决方案3】:

    要回答有关firebase-cron 工作原理的问题:

    这个模块需要在某个服务器上运行,所以它始终处于开启状态。 当作业运行时,这意味着它将获取该作业的指定数据并将其放入指定的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 服务运行,这可能就没有必要了。

    【讨论】:

      【解决方案4】:

      解决方案 1

      早在 2017 年 3 月,Abe Haskins 就发布了an article,介绍了如何利用 Google 的 App Engine Cron 为 Firebase 安排 cron 作业。如果你想遵循这种方法,你需要:

      • 混帐
      • Python 2.7
      • Python 点
      • 谷歌云 SDK

      解决方案 2

      Jeff Delaney 提供了一个很酷的教程,介绍如何为 Firebase 制作动态 cron 作业。你可以看看here

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

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

      解决方案 3

      最后,您还可以使用 免费 第三方 cron 作业服务,例如 cron-job.org。它看起来很简单,它给你:

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

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

      【讨论】:

        【解决方案5】:

        如果您不想使用免费的在线 HTTP 触发器/请求生成器(例如 https://atrigger.com/),一种方法是在用户(客户端)与您的应用交互时触发云功能。存储的 number 类型字段可以保存 UNIX 时间戳。如果该时间戳大于 24 小时,请继续触发您的服务器端云功能(并刷新时间戳),否则停止/中断/退出。可以是一周或一个月或您想要的任何时间间隔。

        如果没有用户与您的应用互动怎么办?在这种情况下,为什么要更新您的应用程序的数据?关于第一个用户的陈旧数据,这是调整时间间隔的问题。此外,您可以提醒用户正在获取新数据并等待/等待。

        【讨论】:

          【解决方案6】:

          在 I/O 2019 上宣布了一项新功能,可以使用 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了!
          猜你喜欢
          • 2018-08-06
          • 2020-01-22
          • 1970-01-01
          • 1970-01-01
          • 2012-04-23
          • 1970-01-01
          • 1970-01-01
          • 2011-09-27
          • 1970-01-01
          相关资源
          最近更新 更多