解决服务器时间不准,时间相差8个小时的问题

avatar
作者
筋斗云
阅读量:0

前言:

        最近把项目部署到Linux服务器上遇到了日志输出时间不准的问题,通过参考资料一顿操作下来终于解决了。在查找资料的过程中,发现许多文章不全面,于是决定自己写一篇;此文章是在融合多家之长的基础上加上自己的总结,希望能帮助大家快速解决问题。

问题:

通常情况下,我们会遇到linux系统时区与其上部署的tomcat时区不一致的问题。最常见的是系统时间为正常的CST中国标准时区(东八区),而tomcat日志时间却比系统时间慢了8个小时

概念介绍

在解决问题之前,我们首先要弄清几个概念,在Linux上有几个时间概念:


一、“系统时间硬件时间


系统时间:一般说来就是我们执行 date 命令看到的时间,linux系统下所有的时间调用(除了直接访问硬件时间的命令)都是使用的这个时间。

硬件时间: 主板上BIOS中的时间,由主板电池供电来维持运行,系统开机时要读取这个时间,并根据它来设定系统时间(注意:系统启动时根据硬件时间设定系统时间的过程可能存在时区换算,这要视具体的系统及相关设置而定)。

二、查看系统时间和硬件时间

1. 系统时间 date
直接调用 date,得到的是本地时间。如果想得到UTC时间的话,使用 date -u

2. 硬件时间hwclock

直接调用 hwclock。

三、系统时间和硬件时间的同步

同步系统时间和硬件时间,可以使用hwclock命令。

//以系统时间为基准,修改硬件时间

hwclock –systohc     <== sys(系统时间)to(写到)hcHard Clock

//以硬件时间为基准,修改系统时间

  hwclock –hctosys

解决问题

步骤一:准备工作

在将解决问题之前,首先要确定系统当前时间是正确的。这里可以通过linux的date命令查看当前时间及时区。

1. 如果结果与本地时间或自己想要的效果一致

   这种情况可以确定问题是出在tomcat上。可以通过步骤二中所列方法进行解决。

2. 如果结果与本地时间或自己想要的效果不一致

   这种情况需要先将系统校正为正确的时区,再通过步骤二的方法解决。具体操作如下:

1)修改时区,以我们使用的北京时间(东八区)为例

输入:tzselect

tzselect

1、选择洲

2、选择国家

3、选择时间并确认

4.将时区信息添加为环境变量TZ

操作步骤:

        # 编辑配置文件

vi /etc/profile

        # 添加如下信息

export TZ="Asia/Shanghai"

        # 使配置生效

source /etc/profile

2)修改完时区后,再次使用date命令查看系统时间是否正确

        解决了系统时区不正确问题后,如果系统时间和tomcat日志时间仍然不一致,则是tomcat启动时读取时区配置造成的定位到是JVM问题。

步骤二:系统时区与Tomcat时区(JVM)不一致的解决方法

方法一(不推荐):就是在启动jar包的命令中添加时区参数
java -jar -Duser.timezone=GMT+08 xxx.jar
但是这是一个临时解决方案, 每次启动都需要添加时区参数, 会很麻烦,。

方法二(推荐):修改/etc/sysconfig/clock配置信息

linux中,JRE每次都从/etc/sysconfig/clock配置文件中获取时区信息,所以可以编辑/etc/sysconfig/clock配置文件添加时区信息,如果没有则新建

ZONE="Asia/Shanghai"   #时区  UTC=false      #设置为false,硬件时钟不与UTC时间一致  ARC=false      #仅用于alpha表明使用ARC。

然后正常重启项目就可以啦


参考文章:

Linux系统与Tomcat时区不一致的解决方法总结(全)-CSDN博客

Linux 系统时间和硬件时间_硬件时间和系统时间-CSDN博客

Linux系统下时间不准的问题_cannot access the hardware clock via any known met-CSDN博客

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!