我在云函数的index.js文件中有以下CRON函数:
// Starts the CRON every 5 minutes in order to get the latest sensors data
exports.cronFunction = functions
// .region('europe-west1')
.pubsub.schedule('2,7,12,17,22,27,32,37,42,47,52,57 * * * *')
.timeZone('Europe/Paris')
.onRun((context) => {
const day = moment();
const db = admin.database();
console.log('CRON Start for all orders!');
return updateStatsForDay(db, day, false, true).then(()=>{
return true;
}).catch(()=>{
return false;
});
});
问题是,在特定时间,5分钟的窗口太短,无法完成脚本的运行,所以我的问题是:如果前一个脚本仍在运行,有没有办法跳过新的执行?
所有云函数实例都是相互独立的,除非您自己跟踪它们,否则您无法检查实例是否已经处于活动状态。您可以在实时数据库中存储布尔值,并在每次函数触发时进行检查。
exports.cronFunction = functions
.pubsub.schedule('* * * * *')
.timeZone('Europe/Paris')
.onRun(async (context) => {
// Check if function is already running in database
const dbRef = admin.database().ref("_status/")
if ((await dbRef.once("value")).val().myFunction) return {error: "Function already running"}
// Else update the value to true
await dbRef.update({myFunction: true})
// Process the data
// Turn the value back to false
await dbRef.update({myFunction: false})
// Terminate the function
});