离线环境通过脚本实现服务器时钟同步(假同步)

1、背景

最近遇到一个时钟同步问题,是内网多台服务器之间时钟不同步,然后部署在不同服务器间的应用展示得时间戳不能统一,所以用户让做一下内网服务器间得时钟同步。

内网服务器x86和arm都有,而且有得系统是centos有得是ubuntu,一开始是想用ntp、chrony这类得时钟同步工具,但是安装时才发现底层缺少各种依赖库。依赖库问题解决太痛苦了,所以就放弃了ntp、chrony这类需要安装得时钟同步工具,准备自己写一个时钟同步脚本。

2、思路

通过date命令可以设置服务器得时钟时间,只要所有机器定时从一台主服务获取时间并同步到自己服务器就可以做到假时钟同步得效果,这里之所以叫假时钟同步,是因为date命令只能设置到秒级别。

3、实现前得准备(免密登录)

因为要远程登录获取主服务器得时钟时间,所以要在从服务器生成密钥并发送到主服务。

生成密钥:ssh-keygen
分发密钥:ssh-copy-id node1 

在客户端生成,都推送一份到要免密登录的服务器

4、编辑脚本

#!/bin/bash
echo "$(date)" >> /opt/timer/test
date -s "$(ssh node1 'date "+%Y-%m-%d %H:%M:%S"')"

5、设置定时同步任务

执行如下命令进入编辑页面
        crontab -e

在编辑页面添加如下定时任务(注意time_update.sh是上一步编辑得脚本,路径根据自己情况修改) 
        * * * * *  /opt/timer/time_update.sh