今天在一台国外服务器上发现一个问题:cron执行任务未按照预期的时间执行。查看任务日志,发现相差了8个小时,正好是与中国时区的差异。

服务器上之前已经设置了使用北京时间:ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime,为何cron执行任务时还是按照UTC时间执行呢?

上网查了一下,原来是设置本地时间前cron已经在运行了,因此按照默认的UTC时间调度执行任务。问题的解决办法也很简单,重启cron服务即可:systemctl restart cron

PS:如果是CentOS系统,服务名为crond,因此重启命令为:systemctl restart crond

参考

1. cron running at different timezone and date command shows different time zone

2. crontab中的百分号