linux怎样自动校正时间?
linux可以通过命令去取世界时间,命令格式如下ntpdate -s timewindowscom前提是需要该linux能够上网,需要自动更新的话,加入系统计划任务即可。按照你需要的每小时或者每分钟去校准即可。若在内网,你可以自己搭建一个时间服务器,有windows的,也有linux的。这里就不再说了。
Ubuntu和Windows双系统,开发娱乐两不误,随用随切换,岂不美哉?
然而,在美的背后,存在一个让人抓狂的Bug:从一个系统切换到另一个系统后,时间就会出错,表现为——
时差8小时。
例如:
一个系统中时间错乱,尚可通过互联网时间同步(NTP服务器)来解决。但是切换到另一个系统后,时差问题照样如故。
在了解时差出现的原因之前,我们先了解以下几个时钟的概念:
指Linux系统内部的时间。我们在系统任务栏中能直接看到的时间就是系统时间。
实时时钟是PC主板上的晶振及相关电路组成的时钟电路的生成脉冲,它控制着计算机系统的时间。操作系统中所提到的RTC,指的就是在计算机主板控制下的时间,即系统时间,为计算机硬件的内部时钟。
协调世界时(英语:Coordinated Universal Time,法语:Temps Universel Coordonné,简称UTC)是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。
——以上描述摘自 维基百科
实践中,UTC与GMT大致重合,其时间的值基本一致 ,但是它们在本质上各不相同。前者以原子时为依据,是确定时间值的标准,而后者则是时区上的概念,作为世界上不同地区人口生活的时间参照。
UTC也是计算机系统中的一个时间衡量标准,Ubuntu默认就将机器时间视为UTC [1] 。Ubuntu 1604及更高版本的时间管理工具 timedatectl 中,UTC时间被单独列出来
CST同时是以下两个时区的英文缩写:
如此缩写相同,在没有明确区分的情况下极易混淆,例如,笔者在小米Max上使用 date 命令查看时区时,输出以下结果:
timedatectl 工具的输出也不会那么明智。如果不知道这两个时区缩写相同,我还真以为系统拿美国的CST作为时区参照,使得这里的CST指的是美国标准时间了。幸好,为了避免歧义,Ubuntu的时区设置界面中特别标明了当前时区相对UTC的时差。
格林尼治平时(英语:Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台当地的平太阳时,因为本初子午线被定义为通过那里的经线。
——以上描述摘自 维基百科
在中国,双系统导致的时差不多不少,正好是8个小时。而这8个小时的时差,正是中国所在时区东八区(GMT+8)相对于GMT的时间差。UTC正与GMT重合,加上其又是Ubuntu系统的时间依据(Ubuntu认为机器时间是UTC),因此对于时区设置为东八区的中国用户来说,这八个小时,不多不少,“刚刚好”。
时间不同步的问题,已经是Ubuntu使用上的一个经典问题了,很多前辈都给出了解决办法, 例如CSDN上 @Bruceoxl 的解决方案, 点此浏览 。
笔者参考的就是这篇教程,根据原教程,我在下面给出进一步的解说。
需要注意的是,Ubuntu会自动设置时区和时间,此时如果不进行后续的设置,机器时间就会被改写。本地时间(Local Time)就是我们在系统中使用的时间,它的值虽然正确,但这是以UTC为参照的,与机器时间存在8小时的时差。一旦重启进入仍然将机器时间视为RTC的Windows,则必会导致时间不统一。
自1604版本起, timedatectl 成为Ubuntu的时间管理工具。不带参数运行时,它会输出当前的时间,以及系统时间的一些配置参数。
以下为设置前的 timedatectl 输出,本地时间为笔者的实际时间,注意观察时差:
第一步:更改硬件时间标准 。为了让Ubuntu能正确显示时间,需要运行以下命令,将硬件时间由UTC改为CST。设置完成后,重启电脑生效:
这里要注意的是,Ubuntu官方其实是不推荐如此设置的。再次运行 timedatectl ,你会发现输出的下方多了一段很长的警告,还加粗了:
意思是:
不过这一警告 我们不必理会 ,毕竟电脑上共存的是两套构造完全不同的系统。
第二步:同步本地时间。 联网打开“Ubuntu设置”→“详细信息”→“日期和时间”,开启前两个选项(“自动设置时间”和“自动设置日期”),稍等片刻。
第三步:同步机器时间。 运行以下命令,将本地时间更新到硬件时间上:
最终设置的结果如下,注意观察时差:
Bruceoxl提供了另一种解决思路,在Windows中设置。打开管理员模式的命令提示符或PowerShell(在 Windows+X 快捷菜单中),输入以下命令 [2] :
原理就是:在注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation 中添加一个名为 RealTimeIsUniversal 的值,类型为 REG_DWORD ,数据为 1 。此项的作用就是让Windows将硬件时间当作UTC,与Ubuntu的默认设置一致。
重启系统后即可生效。
采用上述方法,可完美解决Ubuntu 1604及以上版本与Windows共存时所造成的时差问题,而时差问题的根源就在于默认情况下两个操作系统对待硬件时间的标准不一致。默认地,Ubuntu会将硬件时间视为UTC,而Windows则将其视为本地时间。
上述两种系统的方法不能同时适用,否则会导致两款系统的时间标准不统一。因为在Ubuntu中,我们是要把默认的机器时间标准从UTC改动出去,但在Windows中却刚好相反。时间标准不统一,造成的后果与适用本教程前一模一样,只是错乱的系统变成了Windows。
同时,若在时间标准不统一的情况下设置系统时间, 还会连同硬件时间也一同产生时差 ,提前或延后八个小时。
NTP时间同步服务器 主要偏重于NTP时间同步功能
北斗时间同步服务器 主要偏重于北斗卫星时间来源
GPS时间服务器跟北斗时间同步服务器一样也偏重于时间来源是GPS卫星。
目前计算机网络中各主机和服务器等网络设备的时间基本处于无序的状态。随着计算机网络应用的不断涌现,计算机的时间同步问题成为愈来愈重要的事情。以Unix系统为例,时间的准确性几乎影响到所有的文件操作。 如果一台机器时间不准确,例如在从时间超前的机器上建立一个文件,用ls查看一下,以当前时间减去所显示的文件修改时间会得一个负值,这一问题对于网络文件服务器是一场灾难,文件的可靠性将不复存在。为避免产生本机错误,可从网络上获取时间,这个命令就是rdate,这样系统时钟便可与公共源同步了。但是一旦这一公共时间源出现差错就将产生多米诺效应,与其同步的所有机器的时间因此全都错误。
另外当涉及到网络上的安全设备时,同步问题就更为重要了。这些设备所生成的日志必须要反映出准确的时间。尤其是在处理繁忙数据的时候,如果时间不同步,几乎不可能将来自不同源的日志关联起来。 一旦日志文件不相关连,安全相关工具就会毫无用处。不同步的网络意味着企业不得不花费大量时间手动跟踪安全事件。现在让我们来看看如何才能同步网络,并使得安全日志能呈现出准确地时间。
Internet的发展使得电子货币,网上购物,网上证券、金融交易成为可能,顾客可以坐在家里用个人电脑进行上述活动。要保证这些活动的正常进行就要有统一的时间。不能设想用户3点钟汇出一笔钱银行2点50分收到。个人电脑的时钟准确度很低,只有10-4、10-5,一天下来有可能差十几秒。
现在许多在线教学系统的许多功能都使用了时间记录,比如上网时间记录,递交作业时间和考试时间等等。通常在线教学系统记录的用户数据均以网站服务器时间为准。笔者以前就曾出现过因为应用服务器时间还在23点55分,而数据库服务器已跨过24点,导致正在进行的整个批处理日切或数据归档等重要处理失败或根本无法进行的情况,其实应用和数据库服务器时间也只是相差了几分钟而已。为了避免出现这种情况,系统管理员要经常关注服务器的时间,发现时间差距较大时可以手工调整,但由系统管理员手工调整既不准确、并且随着服务器数量的增加也会出现遗忘,因此有必要让系统自动完成同步多个服务器的时间。
上述问题的解决方法,就是需要一个能调整时钟抖动率,建立一个即时缓和、调整时间变化,并用一群受托服务器提供准确、稳定时间的时间管理协议,这就是网络时间协议(NTP)。如果你的局域网可以访问互联网,那么不必安装一台专门的NTP服务器,只需安装NTP的客户端软件到互联网上的公共NTP服务器自动修正时间即可,但是这样时间能同步但不精准还可能因为网络不稳定从而导致时间同步失败的结果,最佳方案则是在网络里安装一台属于自己的NTP服务器硬件设备,将各个计算机时间同步且统一起来,成本也不高即便高相对于大数据服务器来说孰轻孰重,作为网络工程师你更清楚。
总结:
随着网络规模、网上应用不断扩大,网络设备与服务器数量不断增加。网络管理员在查看众多网络设备日志时,往往发现时间不一,即使手工设置时间,也会出现因时区或夏令时等因素造成时间误差;有些二层交换机重启后,时钟会还原到初始值,需要重新设置时间。对于核心网络设备和重要应用服务器而言,它们之间有时需要协同工作,因此时间的准确可靠性显得尤为重要。
NTP服务的配置及使用都非常简单,并且占用的网络资料非常小。NTP时间服务器目前广泛应用于网络安全、在线教学、数据库备份等领域。企业采取措施同步网络和设备的时间非常重要,但确保安全设备所产生的日志能提供精确的时间更应当得到关注。
0条评论