今天发现一台新的服务器( ubuntu 18.04 )的计划任务异常,但非常有规律,就是所有任务都比预设时间晚了 8 个小时执行。自然而言猜测是时区设置问题。
奇怪的是date -R里显示的时区是上海+8 时区,符合预期。有人说这是因为用户 bash 环境设置了TZ环境变量,而计划任务并不会初始化 bash 环境导致的。但我们并没有设置过TZ变量,echo $TZ的结果是空。
然后检查了/etc/localtime和/etc/timezone两个文件,发现前者显示CST+8时区,但后者里面是UTC时区,不符合预期。但为什么date -R能得到争取的时区,但cronjob却不能,却不得而知。
最后修改方式:
sudo dpkg-reconfigure tzdata
这时候date -R和more /etc/localtime和more /etc/timezone都显示正确的时区了。
设置时区之后,最好手工重启cron服务:
sudo /etc/init.d/cron restart
Q. E. D.