首先要知道有Linux服务器有2种时钟类型
1.硬件时钟(RTC time)
可以通过hwcolock或clock命令操作硬件时钟
通过date修改时间,当系统下次重启时,系统时钟还会从硬件时钟去取,
date设置的时间就无效了,所以需要hwclock设置时间
2.系统时钟
查看系统时钟:date
如果使用date -s "yyyy-MM-dd HH:mm:ss"
手动修改时间不生效,
可能是互联网同步时间功能处于开启状态,
可以使用命令:timedatectl set-ntp 0关掉,
再次开启互联网时间同步功能执行开启命令:timedatectl set-ntp 1
timedatectl命令可以查看时区和时间
- Local time:地方时间,
- Universal time:世界时间,
- RTC time:硬件时钟,
- Time zone:时区,
- NTP enabled: yes:yes是指NTP已经启用,当其值为no时说明NTP未启用,
- NTP synchronized:yes:yes是指完成过NTP同步,no说明未完成过NTP同步,
3.硬件时钟与系统时钟间的同步
从硬件时钟同步时间至系统时钟
[root@hadoopmaster ~]# hwclock --hctosys
或者
[root@hadoopmaster ~]# clock --hctosys
从系统时钟同步时间至硬件时钟
[root@hadoopmaster ~]# hwclock --systohc
或者
[root@hadoopmaster ~]# clock --systohc
更改时区有两种方式,一种是使用timedatectl命令(如果系统中有该命令的话),另一种是为时区文件创建符合链接。
方式一:使用timedatactl命令
确定完要修改的时区后,可以使用如下命令进行修改,下面的命令将时区改为America/New_York时区
[root@hadoopmaster ~]# timedatectl set-timezone America/New_York
You have mail in /var/spool/mail/root
改完后可以查看验证一下是否更改成功,
[root@hadoopmaster ~]# timedatectl
Local time: Sun 2022-04-17 05:10:49 EDT
Universal time: Sun 2022-04-17 09:10:49 UTC
RTC time: Sun 2022-04-17 09:10:49
Time zone: America/New_York (EDT, -0400)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at Sun 2022-03-13 01:59:59 EST Sun 2022-03-13 03:00:00 EDT
Next DST change: DST ends (the clock jumps one hour backwards) at Sun 2022-11-06 01:59:59 EDT Sun 2022-11-06 01:00:00 EST
显然已经更改成功。
方式二:通过创建符号链接来更改时区
在没有timedatectl命令的系统中,可以通过将/usr/share/zoneinfo下的不同时区文件链接到/etc/localtime的方式来更改时区,一般而言系统中已经有时区文件链接到/etc/localtime,我们可以将该文件先备份:cp /etc/localtime /etc/localtime.20220417bak01,然后为新的时区文件创建符号链接
ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
踩坑记录:把系统时间时区设置为0时区
方法1:在/etc/profile加一行
export TZ=“UTC-08:00”
source /etc/profile 使配置生效
date查看时间,发现时间变成了0时区时间,但是机器上的jenkins执行的python脚本时间却是本地时间(东八区)
方法2:timedatectl查看时区
发现本地时间却是还是东八区时间
执行:timedatectl set-timezone UTC
本地时间变为0时区时间