Firebase 的云函数按时触发?

IT技术 javascript firebase google-cloud-platform google-cloud-functions
2021-01-22 00:06:47

我正在寻找一种为 Firebase 安排 Cloud Functions 的方法,或者换句话说,在特定时间触发它们。

3个回答

更新2019-04-18

现在有一种非常简单的方法可以通过 Firebase 在 Cloud Functions 上部署计划代码。

您可以使用简单的文本语法:

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

或者更灵活的 cron 表格式:

export scheduledFunctionCrontab =
functions.pubsub.schedule('5 11 * * *').onRun((context) => {
    console.log('This will be run every day at 11:05 AM UTC!');
});

要了解更多信息,请参阅:

请注意,您的项目需要在 Blaze 计划中才能运行,因此我将保留下面的替代选项以供参考。

如果您想在另一个触发器的执行中延迟对 Cloud Functions 的单个调用进行调度,您可以使用Cloud Tasks进行设置。 阅读本文以获取有关其工作原理的扩展示例。

原答案如下...


目前还没有内置的 runat/cron 类型的触发器。

目前,最好的选择是使用外部服务定期触发 HTTP 功能。有关更多信息,请参阅函数示例存储库中的此示例或者使用最近推出的 Google Cloud Scheduler 通过 PubSub 或 HTTPS 触发 Cloud Functions:

在此处输入图片说明

我还强烈建议阅读 Firebase 博客上的这篇文章:How to Schedule (Cron) Jobs with Cloud Functions for Firebase和这个视频:Timing Cloud Functions for Firebase using an HTTP Trigger and Cron

最后一个链接使用cron-job.org触发 Cloud Functions,适用于免费计划的项目。请注意,这允许任何人在未经授权的情况下调用您的函数,因此您可能希望在代码本身中包含一些滥用保护机制。

Jen 的视频已被标记为已弃用。那么有没有另一种方法来做到这一点?
2021-03-12 00:06:47
从 Cloud Scheduler 页面:Each Cloud Scheduler job costs $0.10 (USD) per month假设“作业”并不意味着每次计划的事情触发,而是每个计时器的成本?即每分钟运行一次的作业只需 0.10 美元?(不包括它调用的任何云函数)。
2021-03-13 00:06:47
这种方法在今天和制作视频(和博客文章)时一样有效。语法略有变化,但我认为这个特定案例不受此影响。如果您在完成这项工作时遇到问题,请提出一个问题,显示您已经完成的工作。
2021-03-28 00:06:47
没有任何改变。包括cron-job.orgJen 在博客文章中谈到的事实可以免费使用。
2021-04-06 00:06:47
哇,他们终于实现了一种简单的方法!最后 !!!!感谢更新
2021-04-09 00:06:47

您可以做的是启动一个 AppEngine 实例,该实例由 cron 作业触发并发送到 PubSub。我专门写了一篇博文,你可能想看看:

https://mhaligowski.github.io/blog/2017/05/25/scheduled-cloud-function-execution.html

@EhteshamHasan 看起来它可能是免费的:cloud.google.com/free目前 28 个实例小时/天免费;此外,还有 Google Compute Engine 的 f1-micro 实例,带有 Linux 运行免费 atm 的 crons。
2021-03-13 00:06:47
对于每小时触发一次的 cron 作业,每月的估计成本是多少?
2021-04-05 00:06:47

重要的是首先要注意,根据文档,您的函数将在其上执行的默认时区是America/Los_Angeles如果您想在不同的时区触发您的函数,您可以在此处找到时区列表

注意!!:这是一个有用的网站来帮助处理cron 表格式(我发现它非常有用)

以下是您的操作方法:(假设您想使用非洲/约翰内斯堡作为您的时区)

export const executeFunction = functions.pubsub.schedule("10 23 * * *")
    .timeZone('Africa/Johannesburg').onRun(() => { 
       console.log("successfully executed at 23:10 Johannesburg Time!!");
    });

否则,如果你宁愿坚持默认:

export const executeFunction = functions.pubsub.schedule("10 23 * * *")
    .onRun(() => { 
       console.log("successfully executed at 23:10 Los Angeles Time!!");
    });