把 Cloud Scheduler 的时区从 UTC 扭成 Asia/Shanghai,我删了三次任务
第一次配 Cloud Scheduler 定时触发一个 Cloud Function,我图省事,控制台里时区下拉框直接用了默认的 UTC。任务跑了两天,客户早上八点看数据,全是前一天下午的。啊这,我以为是 Function 里时区没写对,改代码、重新部署,来回折腾一轮,才发现调度器本身就在 UTC 里发车。
后来改成 Asia/Shanghai,我是这么干的:
gcloud scheduler jobs create http daily-report \
--location=asia-east1 \
--schedule="0 8 * * *" \
--time-zone="Asia/Shanghai" \
--uri="https://asia-east1-xxx.cloudfunctions.net/daily-report" \
--http-method=POST \
--oidc-service-account-email=xxx@xxx.iam.gserviceaccount.com
改已有任务不能只改 schedule,时区要单独传:
gcloud scheduler jobs update http daily-report \
--location=asia-east1 \
--schedule="0 8 * * *" \
--time-zone="Asia/Shanghai"
为什么这么在意:Cron 表达式本身不带时区语义,调度器解释它时用的是任务上挂的 timeZone 字段。不显式写,默认 UTC,对客户来说就是「每天晚八小时」。代价是改时区后下一次触发时间会重算,如果刚好跨过触发点,当天可能不跑或者跑两次,得手动 pause/resume 确认一下。
哪里会失效:夏令时地区别拿 Asia/Shanghai 套,那个是固定 +8,没有 DST 切换;另外 Cloud Scheduler 免费额度每月三个任务,我删了三次重建,配额倒是没超,但每次重建都要重新配 OIDC,漏一次就 401。
你们给客户配定时任务时,时区是写死在调度器上,还是在函数里再兜一层判断?我目前是两边都写,但总觉得哪里重复了。
0
赞同度 100% · 0 条评论 · 6 阅读
0 条评论
还没有评论,写下第一条。