红联Linux门户
Linux协助

在Linux上运用NTP坚持准确的时刻

发布时刻:2018-03-19 16:14:42来历:linux.cn作者:qhwdw
怎样坚持正确的时刻,怎样运用 NTP 和 systemd 让你的核算机在不乱用时刻服务器的前提下坚持同步。
 
它的时刻是多少?
让 Linux 来告知你时刻的时分,它是很古怪的。你或许认为是运用 time 指令来告知你时刻,其实并不是,由于 time 仅仅一个丈量一个进程运转了多少时刻的计时器。为得到时刻,你需求运转的是 date 指令,你想检查更多的日期,你能够运转 cal 指令。文件上的时刻戳也是一个简略混杂的当地,由于依据你的发行版默许状况不同,它一般有两种不同的显现办法。下面是来自 Ubuntu 16.04 LTS 的示例:
$ ls -l
drwxrwxr-x 5 carla carla 4096 Mar 27 2017 stuff
drwxrwxr-x 2 carla carla 4096 Dec 8 11:32 things
-rw-rw-r-- 1 carla carla 626052 Nov 21 12:07 fatpdf.pdf
-rw-rw-r-- 1 carla carla 2781 Apr 18 2017 oddlots.txt
有些显现年,有些显现时刻,这样的办法让你的文件更紊乱。GNU 默许的状况是,假如你的文件在六个月以内,则显现时刻而不是年。我想这样做或许是有原因的。假如你的 Linux 是这样的,尝试用 ls -l --time-style=long-iso 指令,让时刻戳用同一种办法去显现,按字母次序排序。
 
检查当时设置
NTP —— 网络时刻协议,它是坚持核算机正确时刻的旧式办法。ntpd 是 NTP 看护程序,它经过周期性地查询公共时刻服务器来按需调整你的核算机时刻。它是一个简略的、轻量级的协议,运用它的基本功能时设置十分简略。systemd 经过运用 systemd-timesyncd.service 现已越俎代庖地 “干了 NTP 的活”,它能够用作 ntpd 的客户端。
在咱们开端与 NTP “打交道” 之前,先花一些时刻来了检查一下当时的时刻设置是否正确。
你的体系上(至少)有两个时钟:体系时刻 —— 它由 Linux 内核办理,第二个是你的主板上的硬件时钟,它也称为实时时钟(RTC)。当你进入体系的 BIOS 时,你能够看到你的硬件时钟的时刻,你也能够去改动它的设置。当你装置一个新的 Linux 时,在一些图形化的时刻办理器中,你会被问询是否设置你的 RTC 为 UTC(国际标准时刻)时区,由于一切的时区和夏令时都是根据 UTC 的。你能够运用 hwclock 指令去检查:
$ sudo hwclock --debug
hwclock from util-linux 2.27.1
Using the /dev interface to the clock.
Hardware clock is on UTC time
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2018/01/22 22:14:31
Hw clock time : 2018/01/22 22:14:31 = 1516659271 seconds since 1969
Time since last adjustment is 1516659271 seconds
Calculated Hardware Clock drift is 0.000000 seconds
Mon 22 Jan 2018 02:14:30 PM PST .202760 seconds
Hardware clock is on UTC time 标明晰你的核算机的 RTC 是运用 UTC 时刻的,尽管它把该时刻转换为你的本地时刻。假如它被设置为本地时刻,它将显现 Hardware clock is on local time。
你应该有一个 /etc/adjtime 文件。假如没有的话,运用如下指令同步你的 RTC 为体系时刻,
$ sudo hwclock -w
这个指令将生成该文件,内容看起来相似如下:
$ cat /etc/adjtime
0.000000 1516661953 0.000000
1516661953
UTC
新发明的 systemd 办法是去运转 timedatectl 指令,运转它不需求 root 权限:
$ timedatectl
Local time: Mon 2018-01-22 14:17:51 PST
Universal time: Mon 2018-01-22 22:17:51 UTC
RTC time: Mon 2018-01-22 22:17:51
Time zone: America/Los_Angeles (PST, -0800)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
RTC in local TZ: no 标明它运用 UTC 时刻。那么怎样改成运用本地时刻?这里有许多种办法能够做到。最简略的办法是运用一个图形装备东西,比方像 openSUSE 中的 YaST。你也可运用 timedatectl:
$ timedatectl set-local-rtc 0
或许修改 /etc/adjtime,将 UTC 替换为 LOCAL。
 
systemd-timesyncd 客户端
现在,我现已累了,可是咱们刚到十分精彩的部分。谁能想到计时如此杂乱?咱们乃至还没有了解到它的皮裘;阅览 man 8 hwclock 去了解你的核算机怎样坚持时刻的具体内容。
systemd 供给了 systemd-timesyncd.service 客户端,它能够查询长途时刻服务器并调整你的本地体系时刻。在 /etc/systemd/timesyncd.conf 中装备你的(时刻)服务器。大多数 Linux 发行版都供给了一个默许装备,它指向他们保护的时刻服务器上,比方,以下是 Fedora 的:
[Time]
#NTP=
#FallbackNTP=0.fedora.pool.ntp.org 1.fedora.pool.ntp.org
你能够输入你期望运用的其它时刻服务器,比方你自己的本地 NTP 服务器,在 NTP= 行上输入一个以空格分隔的服务器列表。(别忘了撤销这一行的注释)NTP= 行上的任何内容都将覆盖掉 FallbackNTP 行上的装备项。
假如你不想运用 systemd 呢?那么,你将需求 NTP 就行。
 
装备 NTP 服务器和客户端
装备你自己的局域网 NTP 服务器是一个十分好的实践,这样你的网内核算机就不需求不断查询公共 NTP 服务器。在大多数 Linux 上的 NTP 都来自 ntp 包,它们大多都供给 /etc/ntp.conf 文件去装备时刻服务器。查阅 NTP 时刻服务器池 去找到你地点的区域的适宜的 NTP 服务器池。然后在你的 /etc/ntp.conf 中输入 4 - 5 个服务器,每个服务器用独自的一行:
driftfile /var/ntp.drift
logfile /var/log/ntp.log
server 0.europe.pool.ntp.org
server 1.europe.pool.ntp.org
server 2.europe.pool.ntp.org
server 3.europe.pool.ntp.org
driftfile 告知 ntpd 它需求保存用于发动时运用时刻服务器快速同步你的体系时钟的信息。而日志也将保存在他们自己指定的目录中,而不是转储到 syslog 中。假如你的 Linux 发行版默许供给了这些文件,请运用它们。
现在去发动看护程序;在大多数干流的 Linux 中它的指令是 sudo systemctl start ntpd。让它运转几分钟之后,咱们再次去检查它的状况:
$ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================
+dev.smatwebdesi 192.168.194.89 3 u 25 64 37 92.456 -6.395 18.530
*chl.la 127.67.113.92 2 u 23 64 37 75.175 8.820 8.230
+four0.fairy.mat 35.73.197.144 2 u 22 64 37 116.272 -10.033 40.151
-195.21.152.161 195.66.241.2 2 u 27 64 37 107.559 1.822 27.346
我不知道这些内容是什么意思,但重要的是,你的看护程序现已与时刻服务器开端对话了,而这正是咱们所需求的。你能够去运转 sudo systemctl enable ntpd 指令,永久启用它。假如你的 Linux 没有运用 systemd,那么,给你留下的家庭作业便是找出怎样去运转 ntpd。
现在,你能够在你的局域网中的其它核算机上设置 systemd-timesyncd,这样它们就能够运用你的本地 NTP 服务器了,或许,在它们上面装置 NTP,然后在它们的 /etc/ntp.conf 上输入你的本地 NTP 服务器。
NTP 服务器会遭到进犯,并且需求在不断添加。你能够经过运转你自己的公共 NTP 服务器来供给协助。
 
怎样在Linux/Unix之上绑定ntpd到特定的IP地址:http://www.138comgov138.com/linux/33224.html
用NTP把控时刻(一):运用概览:http://www.138comgov138.com/linux/30351.html
在Ubuntu中运用NTP进行时刻同步:http://www.138comgov138.com/linux/27546.html
Linux下两个主机NTP同步:http://www.138comgov138.com/linux/24030.html
怎样在CentOS中建立NTP服务器:http://www.138comgov138.com/linux/12470.html