您的位置:首页 > 运维架构 > Linux

<安彦>Linux系统时间同步

2017-07-12 13:41 148 查看
一、调研背景

由于产品服务器在内网环境, Linux系统作为服务器出现系统时间跑偏问题。一般情况下可以使用date命令进行时间设置,但是有些复杂操作时对多台机器的时间差是有要求的,此时就需要使用ntpdate进行时间同步。

二、调研方向

1.怎么做到服务器时间同步。

2.如何搭建自己的NTP服务器并供其他机器使用。

3.时间同步频率如何去控制。

4.如何控制系统时间与硬件时间的问题。

三、基础知识储备

1.Linux时间的操作的常见命令

(1).date :查看当前时间,结果如下:

[root@99centos~]# date

2017年 04月 12日 星期三 14:34:30 CST

(2).date ‘+%Y%M%D’ 按照格式显示当前日期,结果如下:

[root@99centos ~]# date “+%Y-%m-%d %H:%M:%S”

2017-04-12 14:36:10

(3).date -s “xxx xx:xx:xx” 设置系统时间

[root@99centos ~]# date -s “20170412 14:42:00”

2017年 04月 12日 星期三 14:42:00 CST

2.Linux的时间同步命令

命令:utpdate 时间服务器ip

[root@99centos ~]# ntpdate 192.168.5.75

12 Apr 15:26:27 ntpdate[2667]: step time server 192.168.5.75 offset -311.570389 sec

3.系统时间与硬件时间

(1)、linux中时间分为系统时间与硬件时间,系统时间可以通过date命令进行查看而硬件时间则需要使用hwclock或者hwclock -r命令进行查看

(2)、设置系统时间:date -s “2016-01-15 15:58:00”设置硬件时间:hwclock –set –date “2016-01-15 15:58:00”

(3)、系统时间–>同步到–>硬件时间:hwclock -w

4.实现循环同步的命令

时间频率控制使用crontab定时器进行定时任务

每十分钟执行一次:

crontab -e

/10 * * * root ntpdate 192.168.5.75 && hwclock -w

*号从左到右为分、时、日、月、周

hwclock -w是指让系统时间同步到硬件时间

crontab -l 查看当前的定时任务

crontab -r 删除当前的定时任务

四、Linux系统时间校准方案

1.方案一、定时将硬件时间同步到系统时间

没有授时服务器时,定时将硬件时间同步到系统时间。

硬件时间–>同步到–>系统时间:hwclock -s

2.方案二、有授时服务器时且做了时间同步操作之后,把系统时间同步到硬件时间(自动同步)

1.NTP服务器的配置(环境:内网)

以win7作为NTPserver,centOS作为client进行时间同步。

Windows环境搭建服务器:

前提:windows:ntp-4.2.4p8@lennon-o-lpv-win32-setup.exe

1.安装按照步骤点下一步下一步就行,我设置的本机widows机器的IP:192.168.5.75

2.在计算机服务中开启windows.time

3.在C:\Program Files目录下有个ntp的配置文件ntp.conf

设置为:

server 127.127.1.0 prefer

fudge 127.127.1.0 stratum 10

4.安装完成后打开配置文件,即“C:\Program Files\NTP\etc下面的ntp.conf文件”。里面有一点需要记住的地方,即“driftfile “C:\Program Files\NTP0606\etc\ntp.drift””这一条,也就是说我们要在对应的目录下创建一个名为“ntp.drift”的文件,文件的内容为“0.000”

5.最后在开始cmd运行里面输入net start ntp service启动服务。

如果请求服务已经启动说明时间服务器搭建成功。

Linux 环境测试(远程连接192.168.0.99):

1.设定NTP主机来源(其中prefer表示优先主机),192.168.5.75是本地的NTP服务器,所以优先指定从该主机同步时间。

server 192.168.5.75 prefer

server 0.rhel.pool.ntp.org iburst

server 1.rhel.pool.ntp.org iburst

server 2.rhel.pool.ntp.org iburst

2.设置默认策略为允许任何主机进行时间同步

restrict default nomodify

ntp服务,默认只会同步系统时间。

如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpd文件,在/etc/sysconfig/ntpd文件中,添加 SYNC_HWCLOCK=yes 这样,就可以让硬件时间与系统时间一起同步。

允许BIOS与系统时间同步,也可以通过hwclock -w 命令

SYNC_HWCLOCK=yes

4.开启服务(自动同步)



5.查看ntp服务器是否运行成功



运行状态running,前后执行date命令发现时间改变成功。

6.查看ntp服务器有无和上层ntp连通



7.查看ntp服务器与上层ntp的状态



remote - 本机和上层ntp的ip或主机名,“+”表示优先,“*”表示次优先refid - 参考上一层ntp主机地址

st - stratum阶层

when - 多少秒前曾经同步过时间

poll - 下次更新在多少秒后

reach - 已经向上层ntp服务器要求更新的次数

delay - 网络延迟

offset - 时间补偿

jitter - 系统时间与bios时间差

此时说明自动时间同步配置成功。

2.方案三、有授时服务器时且做了时间同步操作之后,把系统时间同步到硬件时间(手动同步)

在方案二的基础上:

Windows环境测试:

–>让192.168.4.69与我的192.168.5.75时间同步,在右下方时间

–>点击更改日期和时间设置

–>点击Internet时间把时间服务器地址设置成192.168.5.75

–>点击立即更新

–>成功。时间已同步。

Linux环境测试:

手动执行时间同步命令失败案例:



提示: the NTP socket is in use, exiting。这个NTP通信正在被使用。

解决方案:

这个是linux上已经存在这个进程,输入:ps -ef | grep ntpd



Kill掉ntp的进程

或者把linux上NTP服务关闭:systemctl stop ntpd.service后再执行手动时间同步命令



时间同步执行成功。

注意:以上测试环境,Linux环境的防火墙iptables必须对UDP端口为123的放行或者关闭Linux上的防火墙。

五、结论

根据产品需求,此次调研结果:

Linux命令的执行:

在/var/spool/cron下创建一个root文件

1、没有授时服务器默认间隔1小时将硬件时间同步到系统时间

a. 默认间隔1小时将硬件时间同步到系统时间

echo ‘* /1 * * /sbin/hwclock -s’ >> /var/spool/cron/root

c.查看当前的定时任务

crontab -l

d.删除当前用户的指定定时任务

sed –i ‘/hwclock -s/d’ /var/spool/cron/root

2.有授时服务器的时候,这里就以192.168.5.75和1小时时间频率为例

添加定时任务

echo ‘* /1 * * /usr/sbin/ntpdate 192.168.5.75 && /sbin/hwclock –w’ >> /var/spool/cron/root

注意:&&前一个命令执行不成功,后面一个命令不执行。

删除当前用户的指定定时任务

sed –i ‘/ntpdate/d’ /var/spool/cron/root

模糊查询

grep ‘hwclock -s’ /var/spool/cron/root

查看root下的文件内容

cat /var/spool/cron/root

linux测试环境要求:

1.需要一个正常运行的授时服务器IP

2.crontab定时任务需要开启自启

查看crontab服务状态:

systemctl status crond

手动启动crontab服务:

systemctl start crond

加入开机自动启动:

systemctl enable crond.service

3.需要对cron目录下root文件和项目中res下clockup.sh开启777权限

查看定时任务是否执行成功的日志:

1.cat /var/log/cron

2.cat /var/spool/mail/root

页面要求:动态设置授时服务器和时间同步频率实现时间同步功能


技术思路:需采用方案三手动进行时间同步。Java代码获取页面传进的参数,进行调用Linux命令实现手动时间同步。在没有方案三授时服务器的情况下,需采用方案一来执行解决时间同步问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 服务器