Cloud Functions for Firebase 按时触发?

Cloud Functions for Firebase trigger on time?

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

更新 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 table 格式:

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

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

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

如果您想在 delay 上从另一个触发器的执行中安排对 Cloud Function 的单次调用,您可以使用 Cloud Tasks to set that up. Read this article 作为扩展示例它是如何工作的。

原回答如下...


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

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

我还强烈建议阅读 Firebase 博客上的这篇 post:How to Schedule (Cron) Jobs with Cloud Functions for Firebase and this video: Timing Cloud Functions for Firebase using an HTTP Trigger and Cron

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

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

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

请务必首先注意,如果您愿意,根据 documentation. You may find a list of timezones here,函数执行的默认时区是 America/Los_Angeles在不同的时区触发您的功能。

注意!!:这是一个有用的网站,可以帮助 cron table formats(我发现它非常有用)

以下是您的操作方式: (假设你想使用 Africa/Johannesburg 作为你的时区)

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!!");
    });