我有 Centos 服务器,我不想在时间更改期间将时间跳回一小时。相反,我想在时间更改前几个小时减慢系统时钟,以便当时间跳回时,我的服务器应该与时间更改后的最新时间同步
答案1
答案2
我认为这里存在时区混乱。
在 Unix/Linux 系统上保持时间的预期方法是让 BIOS 时钟和内核系统时钟在 UTC 上运行。然后,您的用户就拥有一个(或多个)时区。时区转换可确保基础 UTC 时钟以用户本地时间显示。
让我们尝试举一个例子:
# UTC date/time as known by the system clock
date -u
Tue 31 Jan 14:06:23 UTC 2017
# Local time in the UK
TZ=Europe/London date
Tue 31 Jan 14:06:25 GMT 2017
# Local time in France
TZ=Europe/Paris date
Tue 31 Jan 15:06:27 CET 2017
# Local time in west coast USA
TZ=US/Pacific date
Tue 31 Jan 06:06:30 PST 2017
这是另一个:
# UTC absolute reference
TZ=UTC ls -l whos_pointing.txt
-rw-r--r-- 1 roaima roaima 143 Jan 31 14:08 whos_pointing.txt
# Local time in the UK
TZ=Europe/London ls -l whos_pointing.txt
-rw-r--r-- 1 roaima roaima 143 Jan 31 14:08 whos_pointing.txt
# Local time in France
TZ=Europe/Paris ls -l whos_pointing.txt
-rw-r--r-- 1 roaima roaima 143 Jan 31 15:08 whos_pointing.txt
# Local time in west coast USA
TZ=US/Pacific ls -l whos_pointing.txt
-rw-r--r-- 1 roaima roaima 143 Jan 31 06:08 whos_pointing.txt
该文件是同一个文件,但其日期/时间的显示方式有所不同,具体取决于系统认为我在任何时候所处的位置。
# Back in the USA
export TZ=US/Pacific
ls -l whos_pointing.txt
-rw-r--r-- 1 roaima roaima 143 Jan 31 06:08 whos_pointing.txt
touch whos_pointing.txt
ls -l whos_pointing.txt
-rw-r--r-- 1 roaima roaima 143 Jan 31 06:16 whos_pointing.txt
# Jump across to the UK. Notice the file's timestamp has updated here too
export TZ=Europe/London
ls -l whos_pointing.txt
-rw-r--r-- 1 roaima roaima 143 Jan 31 14:16 whos_pointing.txt
设置系统范围的默认时区并不困难,特定用户使用环境变量覆盖它也不难TZ
。我在加利福尼亚州有一台服务器,默认时区是,US/Pacific
但我自己的登录帐户包含export TZ=Europe/London
.
时区转换库自动处理它们所应用的时区的夏令时和冬令时之间的跳跃。系统时钟不会跳动,但每小时(或半小时)的偏移量会在适当的时刻修改。数据库系统在内部使用系统的绝对时间,因此它们不会受到用户显示时间明显向前或向后跳跃的影响。 NTP 还可以使用系统绝对时间,这就是它可以处理世界各地不同时区的服务器的方式(无需担心!)。