<安彦>Linux系统时间同步

来源:互联网 发布:mac傻瓜剪辑视频软件 编辑:程序博客网 时间:2024/04/19 20:12

一、调研背景
由于产品服务器在内网环境, 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命令实现手动时间同步。在没有方案三授时服务器的情况下,需采用方案一来执行解决时间同步问题。

原创粉丝点击