农妇山泉一亩田 发表于 2024-8-7 12:23:57

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

媒介:

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

通常情况下,我们会遇到linux体系时区与其上部署的tomcat时区差别等的问题。最常见的是体系时间为正常的CST中国尺度时区(东八区),而tomcat日志时间却比体系时间慢了8个小时
概念先容

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

一、“体系时间”与“硬件时间”


体系时间: 一般说来就是我们执行 date 命令看到的时间,linux体系下所有的时间调用(除了直接访问硬件时间的命令)都是利用的这个时间。
硬件时间: 主板上BIOS中的时间,由主板电池供电来维持运行,体系开机时要读取这个时间,并根据它来设定体系时间(留意:体系启动时根据硬件时间设定体系时间的过程大概存在时区换算,这要视具体的体系及相关设置而定)。
二、查看体系时间和硬件时间

1. 体系时间 date
直接调用 date,得到的是当地时间。假如想得到UTC时间的话,利用 date -u。
2. 硬件时间 hwclock
直接调用 hwclock。
三、体系时间和硬件时间的同步

同步体系时间和硬件时间,可以利用hwclock命令。
//以体系时间为基准,修改硬件时间
hwclock –systohc     <== sys(体系时间)to(写到)hc(Hard Clock)
//以硬件时间为基准,修改体系时间
  hwclock –hctosys

解决问题

步调一:预备工作

在将解决问题之前,首先要确定体系当前时间是正确的。这里可以通过linux的date命令查看当前时间实时区。
1. 假如效果与当地时间或本身想要的效果划一

   这种情况可以确定问题是出在tomcat上。可以通过步调二中所列方法举行解决。
2. 假如效果与当地时间或本身想要的效果差别等

   这种情况需要先将体系校正为正确的时区,再通过步调二的方法解决。具体操纵如下:
(1)修改时区,以我们利用的北京时间(东八区)为例

输入:tzselect
tzselect https://img-blog.csdnimg.cn/direct/ad38599be1b8483bbda9706e06efebe3.png
1、选择洲
https://img-blog.csdnimg.cn/direct/0d83c771816341938d7265e9a280e593.png
2、选择国家
https://img-blog.csdnimg.cn/direct/d204dcbd78a740a1938e0283bee608d4.png
3、选择时间并确认
https://img-blog.csdnimg.cn/direct/d2586ae47e3147e789218d6619c97dee.pnghttps://img-blog.csdnimg.cn/direct/7d4b573424e647719d3672ea7cbe7a50.png
4.将时区信息添加为环境变量TZ
https://img-blog.csdnimg.cn/direct/8bd88c3739984bffa8f120f2a529c079.png
操纵步调:
        # 编辑配置文件
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博客

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 解决服务器时间不准,时间相差8个小时的问题