我正在寻找一种为 Firebase 安排 Cloud Functions 的方法,或者换句话说,在特定时间触发它们。
Firebase 的云函数按时触发?
更新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,适用于免费计划的项目。请注意,这允许任何人在未经授权的情况下调用您的函数,因此您可能希望在代码本身中包含一些滥用保护机制。
您可以做的是启动一个 AppEngine 实例,该实例由 cron 作业触发并发送到 PubSub。我专门写了一篇博文,你可能想看看:
https://mhaligowski.github.io/blog/2017/05/25/scheduled-cloud-function-execution.html
重要的是首先要注意,根据文档,您的函数将在其上执行的默认时区是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!!");
});