我正在寻找一种方法来为 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 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,适用于免费计划的项目。请注意,这允许任何人在未经授权的情况下调用您的函数,因此您可能希望在代码本身中包含一些滥用保护机制。
您可以做的是启动一个由 cron 作业触发并发送到 PubSub 的 AppEngine 实例。我专门写了一篇博文,你可能想看看:
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!!");
});