Запланированная функция Firebase запускается при обновлении / развертывании - PullRequest
2 голосов
/ 09 января 2020

У меня неожиданное поведение с запланированной облачной функцией 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
...