117

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

4

3 回答 3

130

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 Function 调用,您可以使用Cloud Tasks进行设置。 阅读本文以获取有关其工作原理的扩展示例。

下面的原始答案...


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

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

在此处输入图像描述

我还强烈建议阅读 Firebase 博客上的这篇文章:如何使用 Cloud Functions for Firebase 安排 (Cron) 作业和此视频:使用 HTTP 触发器和 Cron 为 Firebase 计时云函数

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

于 2017-03-14T21:36:02.283 回答
15

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

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

于 2017-05-26T05:33:21.727 回答
2

重要的是首先要注意,根据文档,您的函数将在其上执行的默认时区是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!!");
    });
于 2021-02-17T13:04:08.223 回答