tomcat+ubuntu 时差问题
前言:虚拟机上玩的 ubuntu,配了 java 环境,装了 ftp、ssh、tomcat、nginx;部署了项目,启动 tomcat,发现 tomcat 打的日志时间和 windows 时间不对。还有 ubuntu 的时间也不对。
先把 ubuntu 的时间修改,然后修改 tomcat 的时间差;
以下方法适用于所有 Linux 发行版。首先打开一个终端窗口,输入下面的命令。
sudo ln -sf /usr/share/zoneinfo
先不要按 Enter 键,我们需要按一下 Tab 键。终端会列出许多地理位置。
sudo ln -sf /usr/share/zoneinfo/{your-geographic-area}/{your-city} /etc/localtime
现在按 Enter 键运行这个命令。它会创建一个软链接,将/etc/localtime 文件指向对应的时区文件。你的系统时间会立即发生改变,可以用 date 命令查看。但有一些桌面环境,如 XFCE,任务栏的时间不会改变,用户需要重新登录才能看到变化。
在低版本的 ubuntu 里面以下命令失效
Real Time Clock
RTC 的全称是 Real Time Clock,也叫做硬件时钟(hardware clock). RTC 时间是由主板的 CMOS 电池驱动的。即使你关闭电脑,RTC 时钟也会一直运转,除非 CMOS 电池没电了。很多情况下,RTC 时间并不准确。
要查看你的 RTC 时间,输入以下命令
timedatectl
输出结果
Local time: Wed 2016-03-02 17:47:19 CST
Universal time: Wed 2016-03-02 09:47:19 UTC
RTC time: Wed 2016-03-02 09:47:19
Time zone: Asia/Shanghai (CST, +0800)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
你可以看见,我的本地时间是**17:49:19, **但 RTC 时间是 09:47:19。RTC 时间与本地时间不相同。有时候这会给系统的程序带来问题。RTC 时间是不可靠的。
RTC 时间默认没有时区。要让系统以 UTC 时区读取 RTC 时间,执行下面的命令
timedatectl set-local-rtc 0
要让系统以本地时区读取 RTC 时间,运行这个命令。
timedatectl set-local-rtc 1
推荐以 UTC 时区读取 RTC 时间,这可以减少麻烦。
让系统时间与本地时区时间自动同步
有时候,即使你正确设置好了时区,你的系统时间仍然有可能不准确。我们可以使用 NTP 协议来让系统时间与本地时区时间自动同步。
许多程序需要准确的时间才能发挥应有的功能。而 NTP 可以为网络上的机器提供精确的时间。NTP 是一个应用层协议,使用 UDP 作为传输层协议。NTP 时间服务器从原子钟(atomic clock)获取精确的时间。
使用 Systemd 的 Linux 系统可以用以下命令启用 NTP 网络时间自动同步。
timedatectl set-ntp true
这条命令会启动 systemd-timesyncd 服务。查看 NTP 状态 。
timedatectl status
输出结果:
Local time: Wed 2016-03-02 18:30:35 CST
Universal time: Wed 2016-03-02 10:30:35 UTC
RTC time: Wed 2016-03-02 10:30:35
Time zone: Asia/Shanghai (CST, +0800)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
**网络时间(network time)**为 Yes 就表示启用了 NTP 时间同步,**NTP 同步(NTP synchronized)**有两个状态:Yes 或 No。如果 Network time 没有启用,那么 NTP 同步的状态一定为 No。现在可以查看 systemd-timesyncd 的状态。
sudo systemctl status systemd-timesyncd
输出结果:
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2016-03-02 18:30:29 CST; 1h 37min ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 2243 (systemd-timesyn)
Status: "Synchronized to time server 202.112.29.82:123 (0.arch.pool.ntp.org)."
Tasks: 2 (limit: 512)
CGroup: /system.slice/systemd-timesyncd.service
└─2243 /usr/lib/systemd/systemd-timesyncd
可以发现,系统与 202.112.29.82 这台时间服务器同步成功了
修改到这里机器的时间正常了,但是 tomcat 的时间依旧不正常,继续。
tomcat 的时间修改:
1.通过启动参数,通过 ide 修改启动参数就不说了,在服务器上是没有 ide 的,修改 tomcat 的启动文件 catalina.bat/sh
${catalina_home}/bin/catalina.sh 文件中的 JAVA_OPTS 启动参数中做了以下调整:
JAVA_OPTS=" -Duser.timezone=GMT+08"
即增加了时区选项-Duser.timezone=GMT+08,重新启动 Tomcat,log 日志的时间正确了。
为什么时间需要同步,时间不一致会导致很奇怪的问题,奇怪到你解决不了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于