У меня неожиданное поведение с запланированной облачной функцией Firebase. Функция настроена на запуск каждую ночь в 4 часа утра, и это работает как ожидалось. При развертывании облачных функций с помощью firebase cli deploy эта функция выполняется немедленно. Не имеет значения, было ли оно изменено или нет.
Я пытался выяснить, когда это происходит, поскольку это происходит не при каждом развертывании. Кажется, это происходит только при первом развертывании каждый день. Если я снова разверну облачные функции, то после завершения развертывания запланированная функция больше не будет выполняться.
Существует ли время, когда запланированная функция должна быть запущена немедленно при развертывании? Как я могу предотвратить это?
Редактировать: Добавлен пример кода. Я также сделал еще несколько испытаний. Нежелательные исполнения каким-то образом связаны с расписанием cron.
Я изменил функцию на .schedule ('* / 15 * * * *'), каждую 15-ю минуту, со следующим результатом
13.00 - функция выполняется по расписанию
13.05 - вновь развернутые функции. Запланированная функция выполняется снова
13.10 - вновь развернутые функции. Функция не выполняется
13.15 - функция выполняется по расписанию
Поэтому я бы сказал, что первое развертывание после запланированного выполнения вызывает повторное выполнение функции, а последующее развертывание - нет. В каждом развертывании я обновлял console.log и вижу, что выполняется ПРЕДЫДУЩАЯ версия.
Я также могу упомянуть, что все написано в машинописном тексте
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...
});
index.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