设定每天凌晨两点跑对账 实际前一天傍晚六点就跑了 和记录里的时间正好差八小时 业务数据还没到齐 对账结果全是缺数。乍看像缓存或者权限的锅,追下去往往不是。
date timedatectl | grep 'Time zone' ls -l /etc/localtime # crontab 首行也可以写 CRON_TZ=Asia/Shanghai
追下去是这么回事:crond 用的是系统时区 容器或者新机器上 /etc/localtime 还指向 UTC 任务按 UTC 两点触发 换算到本地就整体前移八小时 数据当然没齐 任务时间表也跟着整体错位。
「crontab 时区偏移」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
具体做法是,先执行 date 看当前时区是不是东八区 别只对着手表时间;用 ls 确认本地时间文件指向上海时区 而不是默认的 UTC;容器部署要在启动时挂载时区文件 别只改宿主机那一边。
验收就看一点,date 输出带 CST 任务触发点也和业务期望的本地时间对上 不再提前。
