用crontab配置了服务器每天的定时任务,但是发现调度执行的时间不正确,执行sh的log输出时间也不正确,相差12小时。

但是用date命令显示的时间是本地的,正确的。

本地时间显示正确是因为在shell环境里面添加了如下配置:

TZ='Asia/Shanghai'; export TZ

但是cron调度任务的时候,并不初始化shell的环境(就是~路径都不能识别,要用绝对路径),时区信息直接读取的/etc/localtime /etc/timezone。因此还是用的当时/etc/timezone中配置的时区(America/New_York)。

因此如果是不同的用户在不同的时区,可以通过shell设置。整个系统的时区则需要修改/etc/localtime /etc/timezone(Debian系统)。

root@li538-111:/# mv /etc/localtime /etc/localtime.bak
root@li538-111:/# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
root@li538-111:/# vim /etc/timezone

Asia/Shanghai

root@li538-111:/# /etc/init.d/cron stop
Stopping periodic command scheduler: cron.
root@li538-111:/# /etc/init.d/cron start
Starting periodic command scheduler: cron.