我在使用 Firebase 计划的云功能时出现了一些意外行为。该功能设置为每晚凌晨 4 点运行,并且按预期工作。使用 firebase cli deploy 部署云功能时,会立即执行此功能。改不改都没关系。
我一直试图弄清楚这种情况何时发生,因为并非每次部署都会发生这种情况。它似乎只发生在每天的第一次部署中。如果我再次部署云功能,部署完成后,计划的功能不会再次执行。
是否有任何时间计划的功能预计在部署时立即运行?我怎样才能防止这种情况发生?
编辑:添加了示例代码。我还做了一些测试。不需要的执行以某种方式与 cron 计划相关联。
我将函数更改为 .schedule('*/15 * * * *'),每 15 分钟一次,结果如下
13.00 - 按计划执行的功能
13.05 - 再次部署功能。计划功能再次执行
13.10 - 再次部署功能。未执行函数
13.15 - 函数按计划执行
所以我会说计划执行后的第一次部署会导致函数再次执行,而后续部署不会。在每次部署中,我更新了一个 console.log,我可以看到它是执行的 PREVIOUS 版本。
我还可以提到一切都是用打字稿写的
firebase-admin: 8.9.0,
firebase-functions: 3.3.0
firebase-tools: 7.7.0
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
export const scheduledFunction = functions
.region('europe-west2')
.runWith({ memory: functions.VALID_MEMORY_OPTIONS[3], timeoutSeconds: functions.MAX_TIMEOUT_SECONDS })
.pubsub
.schedule('0 4 * * *') // Every day 04.00
.timeZone('Europe/Stockholm')
.retryConfig({ retryCount: 2 })
.onRun(async (context) => {
// function code...
});
索引.ts
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
// Initialize firebase admin
admin.initializeApp(functions.config().firebase);
import { scheduledFunction } from './scheduledFunction';
export { scheduledFunction };
...import other functions