在Linux系统中同步时间时,需要了解ntpdate这个命令,默认该命令在主流的Linux发行版中都有安装,默认安装路径/usr/sbin/ntpdate。
以下操作皆在root帐号下进行,如果使用非root帐号,则需要该帐号为sudo用户能进行root权限的操作。
一、安装ntpddate
如果Linux系统中没有安装,可以通过如下命令进行安装:
#centos,redhat系列
yum install ntpdate
#debian,ubuntu系列
apt install ntpdate
#archlinux系列
pacman -S ntpdate
二、快捷方案(仅在服务器都能联网情况下使用)
在全部服务器都可以联网的情况下,可以直接使用定时任务同步阿里云时间服务器。
首先测试同步时间命令是否可用
#手动同步阿里云时间服务器时间
ntpdate ntp.aliyun.com
出现类似如下提示说明命令可用。
为使服务器自动同步时间,可将同步命令加到定时任务。
开始编辑文件内容 crontab -e
#输入定时执行命令:每一个小时执行一次
0 * * * * /usr/sbin/ntpdate -s ntp1.aliyun.com
保存后可通过 crontab -l
查看任务列表
三、搭建时钟服务器(NTP Server)
(在服务器不支持联网的情况下也可使用)
选取局域网内任意服务器作为时钟服务器。
ntp配置文件的路径是 /etc/ntp.conf
,修改配置文件时先进行备份。
#备份
cp /etc/ntp.conf /etc/ntp.conf.bak
#vim编辑文件
vim /etc/ntp.conf
配置文件中,增加如下内容:
# Hosts on local network are less restricted.
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
这个是用来允许192.168.1.*这个网段的服务器都可以使用该ntp服务器同步时间。这里可以根据你实际情况来设定网段。
server ntp.aliyun.com
server 127.127.1.0 prefer
fudge 127.127.1.0 stratum 10
配置行解释: server ntp.aliyun.com:阿里云时钟源。
server 127.127.1.0:将本地时钟源(127.127.1.0)指定为时间同步服务器。
fudge 127.127.1.0 stratum 10:设置本地时钟源(127.127.1.0)的层级为 10。stratum 值表示时钟的准确性级别,通常在 0 到 15 之间,其中 0表示最准确的原子钟。
配置文件ntp.conf图例:
四、启动NTP服务
配置文件配置好保存后,我们可以通过systemctl命令来启动ntp服务。
#启动服务
systemctl start ntpd
#设置开机自启动,避免重启服务器影响ntp服务
systemctl enable ntpd
服务启动后可以通过 ntpstat
或者 systemctl status ntpd
命令来验证服务是否正常。
ntpstat:
systemctl status ntpd:
#重启ntpd服务
systemctl restart ntpd
#查看NTP配置
ntpq -p
字段名 | 含义 |
---|---|
remote | 本机和上层ntp的ip或主机名,“+”有连线可做候选,“*”正在使用的 |
refid | 更上一层的ntp地址 |
st | stratum的级别 |
when | 多少秒前曾经同步过时间 |
poll | 下次更新在多少秒后 |
reach | 已经向上层ntp服务器要求更新的次数 |
delay | 网络延迟 |
offset | 时间补偿 |
jitter | 系统时间与bios时间差 |
五、客户端/服务端手动同步时间
#子节点手动同步主节点(192.168.1.2)时间
ntpdate 192.168.1.2
#主节点手动同步阿里云时间服务器时间
ntpdate ntp.aliyun.com
如果提示以下信息,说明节点自身ntp在使用中,需要停止才能手动同步时间。
停止服务 systemctl stop ntpd
注意:子节点手动同步时间成功的基础上可以配置自动执行同步。 手动更新主节点时间后记得启动主节点ntp服务供子节点同步使用。
六、配置crontab自动执行同步
自动执行同步配置在子节点服务器。
使用crontab定时任务来定期执行ntpdate同步命令,例如我们每小时执行一次,可以通过以下方式实现。
首先在命令终端中输入 crontab -e
命令,然后输入如下命令保存即可。
开始编辑文件内容,输入定时执行命令:
#每一个小时执行一次
0 * * * * /usr/sbin/ntpdate -s <时间服务器IP>
保存后可通过 crontab -l
查看任务列表
如果后续要删除 crontab 中的定时任务,可以使用以下命令 crontab -e
这将打开当前用户的 crontab 文件进行编辑。然后,找到要删除的定时任务行,将其删除或注释掉(在行的前面添加 # 符号)。保存并退出编辑器。
如果您想删除所有的定时任务,可以直接执行以下命令 crontab -r
这将删除当前用户的所有定时任务,包括之前设置过的所有定时任务。
请注意,在执行上述命令之前,请确认您真的要删除定时任务,并且谨慎操作以避免误删重要的任务。
# 带日志输出的时间同步定时任务表达式
*/1 * * * * /bin/bash -c 'echo "$(date)" >> /var/log/ntpdate.log && /usr/sbin/ntpdate 172.30.24.85 >> /var/log/ntpdate.log 2>&1'
这可以在 /var/log/ntpdate.log 此文件下查看执行信息