服务器 UTC vs 本地时间、TZ 指定
cron 表达式本身不含时区信息。表达式所指的时刻遵循运行 cron 的系统的时区。因此同样是 0 9 * * *,实际执行时间也会因服务器时区的不同而不同。
许多服务器·容器的默认时区是 UTC。韩国(KST)为 UTC+9,因此在 UTC 服务器上用 0 0 * * *(午夜)预约时,实际会在韩国时间上午 9 点执行。以本地时间来考虑而预约、结果错开 9 小时的情况非常常见。
部分 cron 实现可以在 crontab 顶部放置像 CRON_TZ=Asia/Seoul 这样的一行,使其按特定时区解读。在容器环境中,也可以通过调整镜像的 TZ 环境变量或 /etc/localtime 来对准想要的地区。不过是否支持因实现而异,需要确认。
在有夏令时(DST)的地区,时钟前后调整的那一天,某些时刻可能被跳过或出现两次,因此在该时段预约的任务可能被遗漏或重复。重要的任务若按 UTC 基准预约,就能避免这类问题。
实用技巧:用 UTC 来思考表达式,并务必确认部署环境的实际时区。顺便一提,本站工具所显示的下次执行时间是以您浏览器的本地时区为基准,可与服务器时区对比参考。