gpt4 book ai didi

javascript - Firebase 函数无法在后台连续为 Cron 作业运行 setTimeOut

转载 作者:行者123 更新时间:2023-11-30 20:11:03 27 4
gpt4 key购买 nike

我想创建一个仅使用纯 Firebase 函数的 cron 作业。

下面是我的代码:

const functions = require('firebase-functions');
var admin = require('firebase-admin');

var serviceAccount = require('<private_key_path>');

admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: 'https://<project_name>.firebaseio.com'
});


cronJob_2min()

function cronJob_2min() {
console.log('cronjob started')
setTimeout(function () {
testTask1()
cronJob_2min()
}, 120000);
}

var testTask1Counter = 0
var testTask1Status = true
function testTask1() {
if (testTask1Status) {
testTask1Status = false //flag the task is started to avoid re-trigger again before the task is done
testTask1Counter++
console.log('testTask1 Executed: ', testTask1Counter)
testTask1Status = true //flag the task as completed to let next round trigger execute the function
}

}

部署后,它按预期工作,每 2 分钟执行一次 cronJob_2min() 并调用 testTask1() 函数。但它只运行了大约 20 分钟,因为日志只显示 10 点之前的计数器。

似乎服务器会在一定时间后进入“休眠模式”。

我知道在后台运行代码会消耗他的 CPU 配额,我对此没有意见。

但我想知道如何让它一直“清醒”?

谢谢。

编辑 1

旁注:我的云函数确实与其他 onCall 函数一起导出,但它太长了,所以我没有放在这篇文章中。我在顶部发布的代码实际上有效,只是 cronJob_2min() 中的 console.log 被归类为我的 onCall 函数之一 sendEmail

编辑2

这样做还能让它保持清醒吗?

//Setup the express, middleware, etc... I will skip that code here

router.get('/wakeUp', function (req, res) {
setTimeout(function () {
var theUrl = "https://us-central1-<project_name>.cloudfunctions.net/api/wakeUp"
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
callback(xmlHttp.responseText);
}
xmlHttp.open("GET", theUrl, true);
xmlHttp.send(null);

}, 120000);
return res.status(200).send('Tata! I am awake! (I suppose)')
})

app.use(router)
exports.api = functions.https.onRequest(app)

除非 Firebase Functions 足够聪明,可以避免来自它自身的 http 请求,否则它应该可以工作吗?

最佳答案

仅使用 Cloud Functions 无法实现可靠的 cron 样式作业。所有功能的最大可配置超时为 9 分钟(默认为 1 分钟)。超时后,您的功能将关闭并在日志中显示错误。

您甚至没有在您显示的代码中定义适当的 Cloud Functions,其效果甚至没有记录(实际上不受支持)。我很惊讶它部署和运行任何你所展示的东西。

Cloud Functions 仅适用于对 Firebase 产品(或 HTTP 请求)中的更改使用react的短期工作。如果你想安排工作,你必须带上自己的调度工具。有 another question on Stack Overflow讨论了一些选项。

关于javascript - Firebase 函数无法在后台连续为 Cron 作业运行 setTimeOut,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52416538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com