日期:2014-05-16  浏览次数:20913 次

Linux启用夏令时,跳变后导致容器日志时间和系统时间相差一小时

日志时间与系统时间相差一小时解决方案
一、 分析
2007年10月分,夏令时曾经做更改,2007年与之前发布的jdk版本均有此问题,2007年后发布的jdk版本不会出现此bug。一线版本jdk为1.5是2004年发布的,通常升级jdk风险太多,所以用以下方法升级时区文件来解决此问题。
已在SUSE Linux Enterprise server 11上测试通过。
参考资料:http://www.oracle.com/cn/technologies/java/tzupdater-readme-136440.html
时区更新下载:http://www.oracle.com/technetwork/java/javase/downloads/tzupdater-download-513681.html
二、 描述
模拟一线的情况成功,与一线的情况相同,在入夏令时和出夏令时会出现时间不能自动调整的问题。
三、 解决步骤
1、修改时区文件
使用root用户更改 /etc/sysconfig/clock
TIMEZONE="Asia/Tehran"
UTC="yes"
DEFAULT_TIMEZONE="Asia/Tehran"
文件描述:TIMEZONE="Asia/Tehran" 表示时区设置为Iran的时区
UTC="yes" 表示启用UTC时间,这样jdk才可以从系统获取正确的时间,必须启用
DEFAULT_TIMEZONE="Asia/Tehran" 默认时区

2、更新jdk时区信息
使用tzupdate.jar 更新jdk的时区信息,注意此时必须要停止所有可能使用jdk的进程,否则会导致升级失败,建议重启系统后升级,保证升级成功
1、下载tzupdate.jar到系统中
2、解压tzupdate.jar
unzip tzupdater-1_3_42-2011k.zip
3、验证版本信息(注意大小写)
java -jar tzupdate.jar –V
如果输出:The Java runtime doesn''t have time zone data (zi directory).
或者
tzupdater version 1.3.42-b02
JRE time zone data version: tzdata2005i
Embedded time zone data version: tzdata2011k
JRE time zone data 的版本是2007以前的,则表示时区信息没有升级到最新,可以继续升级操作

4、升级jdk时区信息
java -jar tzupdate.jar –u
没有任何输出则升级成功
5、测试升级是否成功,无任何输出则升级成功
java -jar tzupdate.jar –t
没有任何输出,则zone data文件验证通过
6、可检查升级后时区版本
java -jar tzupdate.jar –V
输出
tzupdater version 1.3.42-b02
JRE time zone data version: tzdata2011k
Embedded time zone data version: tzdata2011k
则表示升级成功。
3.保证以上步骤没有错误后,调整系统时间,重启操作系统,启动MOS5200系统。检查日志是否与操作系统时间一致。如果时间一致,升级成功。

?

升级碰到的一些问题
1. 升级后验证版本时输出
tzupdater version 1.3.42-b02
JRE time zone data version: tzdata2005i
There's no tzdata available for this Java runtime.
而前面操作没有报错,这是因为你的jdk还有进程在访问,导致升级失败,重启操作系统后执行之前操作就可以升级成功了。
2. 升级后系统时间跟日志时间相差3:30
因为jdk没有获取到正确的时区信息,给jboss的启动文件/opt/netwatcher/pm4h2/app/opt/jboss-report/bin/run.sh中添加启动参数
set JAVA_OPTS=%JAVA_OPTS% -Dprogram.name=%PROGNAME% -Duser.timezone=Asia/Tehran
具体位置加在62行左右,不能再if分支里,保证run.sh一定会执行这句。

重启web容器后就可以获取到正确时区,日志时间会跟随夏令时一起跳变。

3. 测试时输出
The Java runtime doesn''t have time zone data (zi directory).
表示没有升级上去。

1 楼 陈碧滔 2012-01-29  
Jdk 发布时间表
版本号 名称 中文名 发布日期
JDK 1.1.4 Sparkler 宝石 1997-09-12
JDK 1.1.5 Pumpkin 南瓜 1997-12-13
JDK 1.1.6 Abigail 阿比盖尔--女子名 1998-04-24
JDK 1.1.7 Brutus 布鲁图--古罗马政治家和将军 1998-09-28
JDK 1.1.8 Chelsea 切尔西--城市名 1999-04-08
J2SE 1.2 Playground 运动场 1998-12-04
J2SE 1.2.1 none 无 1999-03-30
J2SE 1.2.2 Cricket 蟋蟀 1999-07-08
J2SE 1.3 Kestrel 美洲红隼 2000-05-08
J2SE 1.3.1 Ladybird 瓢虫 2001-05-17
J2SE 1.4.0 Merlin 灰背隼 2002-02-13
J2SE 1.4.1 grasshopper 蚱蜢 2002-09-16
J2SE 1.4.2 Mantis 螳螂 2003-06-26
J2SE 5.0 (1.5.0) Tiger 老虎 2004-10
J2SE 5.1 (1.5.1) Dragonfly 蜻蜓 未发布
J2SE 6.0 (1.6.0) Mustang 野马 2006-04
J2SE 7.0 (1.7.0) Dolphin 海豚 2011-7-28