【www.bbyears.com--Ubuntu】
我购买的VPS默认安装的时区是莫斯科(东四区?),看看几个命令的执行效果:
root@blogguy_cn:~# date
Wed Jan 8 20:16:23 MSK 2014
root@blogguy_cn:~# date -u
Wed Jan 8 16:16:26 UTC 2014
root@blogguy_cn:~# date -R
Wed, 08 Jan 2014 20:18:39 +0400
看到了吧!时区为MSK,比格林威治时间晚4个小时。这不是主要问题,我们常常遇到的。问题是下面的问题:
我要执行下面的crontab:
0 0 * * * root /var/www/cron_book.sh >>/var/www/crontab_book.log 2 >&1
猜猜看,这个任务会在几点执行?
我的本意是要在午夜12点执行,结果呢?看看日志:
2014-01-08 04:00:08 start
有点混乱了。我尝试更改时间为UTC,没有效果。
于是只能把时区更改为与UTC统一的伦敦时区/etc/localtime文件
ln -sf /usr/share/zoneinfo/Europe/London /etc/localtime
同样秀修改/etc/timezone文件,原始文件为:
Etc/UTC
Europe/Moscow
修改为:
Etc/UTC
Europe/London
然后再运行:
root@111cn.net:~# date
Wed Jan 8 16:25:24 GMT 2014
root@111cn.net:~# date -u
Wed Jan 8 16:25:28 UTC 2014
root@111cn.net:~# date -R
Wed, 08 Jan 2014 16:25:37 +0000
总结原因:
在Linux 系统里面,系统时间由硬件时间、UTC(/etc/default/rcS)、Timezone三个因素决定。其中/etc/default/rcS里面的UTC选项告诉Linux系统这个硬件时间是否UTC时间,Timezone是设定系统所处UTC时区(我们通常设为Asia/Shanghai)。系统启动时候读出硬件时间,再根据是否UTC时间、系统所处Timezone计算出系统Localtime。Debian默认把BIOS时间认为是世界时间(UTC),所以就造成系统时间比实际快8小时。