Почему моя функция Cron Scheduled Cloud для Firebase работает по тихоокеанскому времени, а не по UTC?
У меня есть функция "Запланированное облако" (с использованием нового решения Google), которая должна запускаться каждый понедельник в 12:00.
export const updateHighScores = functions.pubsub.schedule('0 0 * * 1').onRun((context) => {
// (code)
// console.log(‘This code will run every Monday at 12:00 AM UTC’);
});
Я ожидал, что это будет работать в 12:00 UTC; однако, когда наступило полночь UTC, ничего не произошло. Поэтому я лег спать, опечаленный тем, что моя запланированная облачная функция не работала, но решил продолжать работать с ней.
Но на следующий день я проверил журналы, и похоже, что они работали, но вместо этого они работали в 12:00 по тихоокеанскому времени.
- Регион облачной функции установлен на us-central1, но я не думаю, что это влияет на это.
- Часовой пояс моего компьютера установлен по тихоокеанскому времени, и я нахожусь в центральном времени, но я не думаю, что это будет иметь значение.
- Я также щелкал в Firebase и Google Cloud Platform, чтобы увидеть, возможно, у меня был параметр, который влиял на него, но я ничего не нашел.
Есть идеи, почему это произошло в полночь по тихоокеанскому времени, а не в UTC?
(Я собираюсь сделать кучу догадок и проверок, меняя все эти переменные и наблюдая, как это влияет на запланированную облачную функцию, но решил, что с таким же успехом можно спросить здесь, если кто-то знает с ног на голову. Спасибо!)
1 ответ
Запланированные функции запускаются по расписанию Google Cloud Scheduler. При развертывании с помощью Firebase CLI автоматически создается запись в Cloud Scheduler. Если вы нажмете на консоль Cloud, чтобы показать свои расписания, вы увидите, что часовой пояс установлен в "America/Los_Angeles", то есть PST.
Часовой пояс устанавливается с помощью API построителя функций. Вы можете прочитать об этом в документации.
Я делаю что-то вроде этого
exports.scheduledFunction = functions.pubsub
.schedule("0 4 * * *")
.timeZone("Asia/Baku")
.onRun((context) => {
groupCustomers.set({});
tables.set({});
calledCustomers.set({});
groups.set({
A: { name: "Altering", activeOnTablet: false },
});
return null;
});