最近遇到服务器时间不对的问题,原因是安装的时候没有配置自动更新时间(NTP),所以咱只能自己动手来给它配置个自动更新时间。
前面的是手动配置的,后来发现有更简单的方法,建议省事直接看文章末尾。

以下教程使用CentOS 7.8为例

一、配置服务器时区信息

首先要选择确定你的服务器使用的时区,一般咱们都用Asia/Shanghai,CentOS当前时区信息存储在/etc/localtime中,但是不需要我们手动修改,实际上也不能手动改,我们从系统预设的时区文件/usr/share/zoneinfo中,拷贝对应的时区文件过去覆盖就可以了。使用下面的命令修改服务器的时区。

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

接下来还有一个配置文件/etc/sysconfig/clock需要修改(没有需要自建一个),配置文件里面的参数和hwclock命令关系很大,系统在启动的时候读取/etc/sysconfig/clock文件的内容,根据这些内容调用hwclock命令,使用vi/vim打开/etc/sysconfig/clock

vim /etc/sysconfig/clock

添加如下内容:

ZONE="Asia/Shanghai"
UTC=false
ARC=false
配置文件支持UTC,ARC,SRM,ZONE这几个参数,详解如下:
UTC指定BIOS中保存的时间是否是GMT/UTC时间,true表示BIOS里面保存的时间是UTC时间,false表示BIOS里面保存的时间是本地时间。
ZONE指定时区,ZONE的值是一个文件的相对路径名,这个文件是相对/usr/share/zoneinfo目录下的一个时区文件。比如ZONE的值可以是:“Asia/Shanghai”, “US/Pacific”, “UTC” 等。
ARC这个参数一般配置false,在一些特殊硬件(Alpha)下才配置该参数为true。
SRM同ARC,该参数一般配置false,在一下特殊硬件下才配置该参数为false。

二、安装NTP客户端

直接yum安装即可:

yum -y install ntp

三、手动同步一次时间

这里需要选定一个NTP服务器,可以使用ping测试一下连通性,如果NTP服务无效会报错“no server suitable for synchronization found”。

中国区可以使用这几个NTP服务器: ntp.api.bz、cn.pool.ntp.org、pool.ntp.org、time.nist.gov。

四、更新硬件时间信息

通过NTP客户端更新的系统的时间,当服务器重启后,服务器会从BIOS中读取时间初始化,所以我们需要将时间信息更新进BIOS。

hwclock -w # 写入硬件时间
hwclock -r # 读取硬件时间

五、开机时自动更新时间

编辑/etc/rc.d/rc.local配置用户开机自动启动程序,添加如下命令:

/usr/sbin/ntpdate -u ntp.api.bz > /dev/null 2>&1
/sbin/hwclock -w

六、配置定时任务

编辑/etc/crontab配置定时任务,每隔分钟更新一次时间,添加如下命令:

00 10 * * * /usr/sbin/ntpdate -u ntp.api.bz > /dev/null 2>&1; /sbin/hwclock -w

七、开机不自动更新问题解决

rc.local文件中有写到,强烈建议使用自己创建的服务或者udev规则来运行脚本,而不是使用此文件,和之前的版本相比,这个脚本不会自动运行,必须给他授权才可以。

chmod +x /etc/rc.d/rc.local

此外还可能是没有启动rc-local服务:

systemctl list-units --type=service  # 查看所有的开启启动项目里面有没有rc-local这个服务
systemctl  status rc-local.service # 查看rc-local服务当前状态

如果有并且开启了,就不用管了,没有开启我们自己开启一下。

systemctl enable rc-local.service
systemctl start rc-local.service
服务的启动文件存放在/lib/systemd/system/目录下面

另一个更简单的方法

也不能说之前的一顿操作猛如虎都白费了,只要能了解一下同步机制吧。

安装NTP,并启动服务,然后手动同步一次时间。

yum install ntp
systemctl start ntpd
systemctl enable ntpd
ntpdate pool.ntp.org
ntpstat

还有一个命令timedatectl可以查看ntp服务同步状态。

最后修改:2021 年 02 月 18 日 05 : 02 PM