服务器系统时间不一致

现在手头任务,需要将一台服务器A 文件压缩远程传输到另外一台服务器B,随后解压处理。运行一段时间后,在服务器 B 运行日志中出现

1
2
tar: 20160801003002predaily/part-r-00037:时间戳 2016-08-01 00:44:13 是未来的 430.123989174 秒之后
tar: 20160801003002predaily/part-r-00038:时间戳 2016-08-01 00:44:13 是未来的 430.123842422 秒之后

文件仍然正常解压,出现原因是A,B 服务器时间不一致,但不影响使用。

解决这个问题的方法有两种,既然是服务器时间不一致,那修改为一致就可以了。方法有两种,

  1. 手动同步: date + hwclock
  2. 自动同步: ntpdate

手动同步

1
date -s "2016-08-01 16:40:00"

Linux 系统的时钟分为:

  • 软件时钟:由Linux操作系统从1970/01/01开始计算的总描述, 可以使用 date
  • 硬件时钟:BIOS(CMOS)上记录的时间,hwclock/clock
    1
    2
    hwclock --show
    or clock --show

硬件时钟(hc)与系统时钟(sys)同步:

1
2
hwclock --hctosys
or clock --hctosys

系统时钟(sys)与硬件时钟(hc)同步:

1
2
hwclock --systohc
or clock --systohc

自动同步

手动同步简单,但是不能从根本上解决问题,一段时间后,很可能又出现时间不一致。一劳永逸的方法是,同步网络时间。推荐参见这篇博客, 使用ntpdate更新系统时间

Linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务器和ntp客户机。在网络中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。 同步时间,可以使用ntpdate命令,也可以使用ntpd服务。 使用ntpdate比较简单。格式如下:

1
$ ntpdate [-nv] [NTP IP/hostname]

同时需要使用 cron 来定时同步时间,

1
0 12 * * * */usr/sbin/ntpdate 192.168.0.1

ps: ntpd 有一个自我保护设置-如果本机与上源时间相差太大, ntpd 不运行. 所以新设置的时间服务器一定要先 ntpdate 从上源取得时间初值, 然后启动 ntpd服务。ntpd服务 运行后, 先是每64秒与上源服务器同步一次, 根据每次同步时测得的误差值经复杂计算逐步调整自己的时间, 随着误差减小, 逐步增加同步的间隔. 每次跳动, 都会重复这个调整的过程.

然而有个问题,ntp 服务器本身也会有偏差, 所以可以情况下,更推荐同步开放 ntp 服务器的时间, 提供的各国NTP服务器列表, 同时国内部分高校也提供 ntp 服务器。