在Linux系统中,为了避免主机时间因为在长时间运行下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务来同步不同机器的时间。NTP 是网络时间协议(Network Time Protocol)的简称,干嘛用的呢?就是通过网络协议使计算机之间的时间同步化。

 

系统时间与硬件时间

在展开Linux系统时间同步前,我们必须先了解一些概念:在一台计算机上我们有两个时钟:一个称之为硬件时间时钟(RTC Real Time Clock,又叫实时时钟),还有一个称之为系统时钟(System Clock)。

硬件时钟是指嵌在主板上的特殊的电路, 它的存在就是平时我们关机之后还可以计算时间的原因。RTC的英文全称是Real-Time Clock,翻译过来是实时时钟芯片. RTC是PC主板上的晶振及相关电路组成的时钟电路的生成脉冲主板上的晶振及相关电路组成的时钟电路的生成脉冲,RTC经过8254电路的变频产生一个频率较低一点的OS(系统)时钟TSC,系统时钟每一个cpu周期加一周期加一,每次系统时钟在系统初起时通过RTC初始化。8254本身工作也需要有自己的驱动时钟(PIT)

系统时钟就是操作系统的kernel所用来计算时间的时钟. 它从1970年1月1日00:00:00 UTC时间到目前为止秒数总和的值。在Linux下系统时间在开机的时候会和硬件时间同步(synchronization),之后也就各自独立运行了

默认情况下,系统时间和硬件时间,并不会自动同步。在Linux运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰。硬件时间的运行,是靠BIOS电池来维持,而系统时间,是用CPU tick来维持的。这也是系统时间长时间运行时会产生时间偏差的原因,我小时候有买过电子手表,那个时候的电子产品还相当不靠谱,电子手表走着走着就和新闻联播里面的时间对不上了,总会查那么几分钟甚至几十分钟,那个时候最苦恼的事情就是需要手动调整电子手表的时间,这也算是时间同步的一种吧!系统时间可以通过date命令查看,硬件时间可以通过clock或hwclock命令查看。我们来看看系统时间和硬件时间吧。

[root@db-server ~]# date

 

Wed Jan 14 14:49:16 CST 2015

 

[root@db-server ~]# 

 

[root@db-server ~]# clock

 

Wed 14 Jan 2015 02:49:24 PM CST -0.473465 seconds

 

[root@db-server ~]# 

 

[root@db-server ~]# hwclock --show

 

Wed 14 Jan 2015 02:49:36 PM CST -0.625346 seconds

 

[root@db-server ~]# 

 

[root@db-server ~]# 

如下所示,我们修改了系统时间,将时间修改为2015-01-14 08:00:00,然后我们查看硬件时间就可以发现,系统时间和硬件时间是异步运行。互补干扰。

[root@db-server ~]# date -s "2015-01-14 08:00:00"

 

Wed Jan 14 08:00:00 CST 2015

 

[root@db-server ~]# date

 

Wed Jan 14 08:00:02 CST 2015

 

[root@db-server ~]# clock

 

Wed 14 Jan 2015 02:52:54 PM CST -0.045672 seconds

 

[root@db-server ~]# 

硬件时间的设置,可以用hwclock或者clock命令。其中,clock和hwclock用法相近,只用一个就行,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件体系。

 

设置硬件时间

[root@db-server ~]# clock

 

Wed 14 Jan 2015 03:24:09 PM CST -0.941272 seconds

 

[root@db-server ~]# hwclock --set --date="2015-01-15 15:24:00";

 

[root@db-server ~]# clock

 

Thu 15 Jan 2015 03:24:04 PM CST -0.476775 seconds

 

[root@db-server ~]# 

[root@db-server ~]# clock --help

hwclock - query and set the hardware clock (RTC)

 

Usage: hwclock [function] [options...]

 

Functions:

  --help        show this help

  --show        read hardware clock and print result

  --set         set the rtc to the time given with --date

  --hctosys     set the system time from the hardware clock

  --systohc     set the hardware clock to the current system time

  --adjust      adjust the rtc to account for systematic drift since 

                the clock was last set or adjusted

  --getepoch    print out the kernel's hardware clock epoch value

  --setepoch    set the kernel's hardware clock epoch value to the 

                value given with --epoch

  --version     print out the version of hwclock to stdout

 

Options: 

  --utc         the hardware clock is kept in coordinated universal time

  --localtime   the hardware clock is kept in local time

  --directisa   access the ISA bus directly instead of /dev/rtc

  --badyear     ignore rtc's year because the bios is broken

  --date        specifies the time to which to set the hardware clock

  --epoch=year  specifies the year which is the beginning of the 

                hardware clock's epoch value

  --noadjfile   do not access /etc/adjtime. Requires the use of

                either --utc or --localtime

 

[root@db-server ~]# hwclock --show

Thu 15 Jan 2015 03:40:47 PM CST  -0.544844 seconds

[root@db-server ~]# clock --set --date  "2015-01-14 15:41:00";

[root@db-server ~]# hwclock --show

Wed 14 Jan 2015 03:41:12 PM CST  -0.740512 seconds

[root@db-server ~]# 

 

系统时间和硬件时间的同步

我们可以使用hwclock --systohc把系统时间设置成硬件时间,如下所示(我们先修改系统时间,手工造成系统时间与硬件时间不一致)

[root@db-server ~]# date -s "2015-01-14 15:53";

Wed Jan 14 15:53:00 CST 2015

[root@db-server ~]# date 

Wed Jan 14 15:53:03 CST 2015

[root@db-server ~]# hwclock --systohc

[root@db-server ~]# date 

Wed Jan 14 15:53:35 CST 2015

[root@db-server ~]# hwclock --show

Wed 14 Jan 2015 03:53:36 PM CST  -0.149835 seconds

我们也可以把硬件时间设置成系统时间:运行以下命令即可

hwclock --hctosys

 

时间同步设置

网络时间协议NTP(Network Time Protocol)是用于互联网中时间同步的标准互联网协议。NTP的用途是把计算机的时间同步到某些时间标准。目前采用的时间标准是世界协调时UTC(Universal Time Coordinated)。NTP的主要开发者是美国特拉华大学的David L. Mills教授。关于NTP概念,深入的话,都足足可以讲一篇。我们暂且只是关注如何同步时间。要同步时间,就必须有一个精确地NTP Server,关于NTP Server可以参考NTP的官方网站http://www.pool.ntp.org,在这上面我们可以找到离我们城市最近的NTP Server

同步世界我们一般使用ntpd或ntpdate这两个命令,那ntpd与ntpdate在更新时间时有什么区别?ntpd不仅仅是时间同步服务器,它还可以做客户端与标准时间服务器进行同步时间,而且是平滑同步,并非ntpdate立即同步,在生产环境中慎用ntpdate,也正如此两者不可同时运行

一个是校准时间,一个是调整时间。也就是说ntpd在实际同步时间时是一点点的校准过来时间的,最终把时间慢慢的校正对。而ntpdate不会考虑其他程序是否会阵痛,直接调整时间。

如下所示,我们首先修改系统时间,然后使用ntpdate命令同步系统时间。

[root@DB-Server ~]# date

Tue Jan 27 23:44:54 CST 2015

[root@DB-Server ~]# date -s "2015-12-27 23:48:50"

Sun Dec 27 23:48:50 CST 2015

[root@DB-Server ~]# ntpdate 2.cn.pool.ntp.org

27 Jan 23:45:41 ntpdate[6930]: step time server 202.112.31.197 offset -28857832.720974 sec

[root@DB-Server ~]# date

Tue Jan 27 23:45:44 CST 2015

但是如果cpu tick有问题,这类调整往往很难一次性解决问题,所以必须结合cron命令来彻底根治这个,例如下面cron命令。

*/30 * * * * /usr/sbin/ntpdate 192.168.7.161 1>/dev/null 2>&1

关于ntpd最好单独一章介绍一下如何配置ntpd。在此不做详细介绍。

 

参考资料:

http://blog.csdn.net/suer0101/article/details/7868813

http://blog.csdn.net/sjx800688/article/details/7010979

http://hoya120.blog.163.com/blog/static/520294792010612103319272/

Linux时间同步介绍的更多相关文章

  1. linux时间同步,ntpd、ntpdate

    linux时间同步,ntpd.ntpdate 在Windwos中,系统时间的设置很简单,界面操作,通俗易懂.而且设置后,重启,关机都没关系.系统时间会自动保存在Bios的时钟里面,启动计算机的时候,系 ...

  2. Linux 时间同步 05 chrony时间同步

    Linux 时间同步 05 chrony时间同步 目录 Linux 时间同步 05 chrony时间同步 chrony 的优势: chrony包介绍 安装chrony 配置与外部时间服务器进行时间同步 ...

  3. 01 Linux入门介绍

    一.Linux 初步介绍 Linux的优点 免费的,开源的 支持多线程,多用户 安全性好 对内存和文件管理优越 系统稳定 消耗资源少 Linux的缺点 操作相对困难 一些专业软件以及游戏支持度不足 L ...

  4. Linux时间同步方式记录

    Linux时间同步 部署Hadoop集群,遇到各个linux服务器的时间不同步的问题,于是研究了一下linux的时间同步方式,特将同步方式,总结如下: A. 前提条件 a)         网络是连通 ...

  5. Linux Epoll介绍和程序实例

    Linux Epoll介绍和程序实例 1. Epoll是何方神圣? Epoll但是当前在Linux下开发大规模并发网络程序的热门人选,Epoll 在Linux2.6内核中正式引入,和select类似, ...

  6. Linux入门介绍

    Linux入门介绍 一.Linux 初步介绍 Linux的优点 免费的,开源的 支持多线程,多用户 安全性好 对内存和文件管理优越 系统稳定 消耗资源少 Linux的缺点 操作相对困难 一些专业软件以 ...

  7. linux 时间同步的2种方法(转)

    linux 时间同步的2种方法 张映 发表于 2012-10-23 分类目录: 服务器相关 标签:linux, ntp, 同步, 时间服务器 由于硬件的原因,机器或多或少的根标准时间对不上,一个月的误 ...

  8. Linux 系统目录介绍

    bin : bin 是Binary 二进制的缩写,就是可执行文件了.Bin目录下是用户常用的命令. sbin: 此目录下也是二进制文件 ,不过这里的命令是 超级用户如 root 这样的用户使用的. e ...

  9. Linux命令介绍

    资料链接:(Linux基本命令介绍)http://note.youdao.com/share/?id=36c07917f8d3e6437c1e764c3516a3f2&type=note#/ ...

随机推荐

  1. Node.js、Express、Socket.io 入门

    前言 周末断断续续的写了第一个socket.io Demo.初次接触socket.io是从其官网看到的,看着get started做了一遍,根据官网的Demo能提供简单的服务端和客户端通讯. 这个De ...

  2. 代码的坏味道(2)——过大的类(Large Class)

    坏味道--过大的类(Large Class) 特征 一个类含有过多字段.函数.代码行. 问题原因 类通常一开始很小,但是随着程序的增长而逐渐膨胀. 类似于过长函数,程序员通常觉得在一个现存类中添加新特 ...

  3. Python字典实现分析

    背景介绍 最近使用Python开发项目为主,当使用到字典时感觉非常方便实用.那么好奇心就驱使我要搞清楚字典是怎么实现的.为了真正的搞清楚字典的实现就不得不使用C语言来实现一遍,为此我查了一些资料现在总 ...

  4. scikit-learn一般实例之一:保序回归(Isotonic Regression)

    对生成的数据进行保序回归的一个实例.保序回归能在训练数据上发现一个非递减逼近函数的同时最小化均方误差.这样的模型的好处是,它不用假设任何形式的目标函数,(如线性).为了比较,这里用一个线性回归作为参照 ...

  5. 初入网络系列笔记(3)HTTP协议最简单的掌握

    一.借鉴说明,本博文借鉴以下博文 1.starok,HTTP必知必会,http://www.cnblogs.com/starstone/p/4890409.html 2.CareySon,HTTP协议 ...

  6. Windows Server 2012 R2在线安装.NET Framework3.5

    Windows Server 2012 (R2) 默认没有安装 .NET Framework 3.5,但可以通过在线安装或指定备用源路径方式. 之前在这个 在Win Server 2012中安装.NE ...

  7. UIAlertController 部分用法及属性

    //创建UIAlertController:初始化UIAlertController 需要使用alertControllerWithTitle UIAlertController *alertCont ...

  8. nginx配置多个虚拟主机vhost

    在nginx下配置虚拟主机vhost非常方便.主要在nginx的配置文件nginx.conf中添加一个server即可 比如我想配置两个虚拟主机,通过域名linux.com和linux2.com访问, ...

  9. python征程2.0(python基础)

    1.python中有一些基本规则的特殊字符. (1)#表示这后的字符为python注释. (2)\n标准的行分隔符. (3)\继续上一行.(也就是过长的语句可以使用反斜杠(\)分解成几行) ) and ...

  10. jQuery:年月日三级联动

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs ...