Whiteship's Note

서버 시간과 자바 시간 맞추기

Linux : 2010.08.04 11:36


현재 톰캣 위에 돌리고 있는 애플리케이션에서 보여주는 시간이 이상해서 
1. 서버에 들어가서 date를 쳐봤다. 그랬더니 현재 시간이 아니었다. 
2. 그래서 서버의 시간을 맞추고..
3. 다시 톰캣을 돌렸다.

그러나... 시간은 맞지 않았다. 어디가 잘못된 것일까? 톰캣 시간과 서버 시간은 애초에 별개였던 것이다. @_@;; 서버 시간 맞춘다고 자바 시간까지 서버 시간 따라서 맞춰지는게 아니엇다.

1. 서버 시간대 맞추기

export env TZ=KST-09:00:00 
rdate -s time.bora.net 
hwclock --systohc
date
hwclock --show

어디선가 보고 배껴만든 스크립트인데;; 잘 동작한다.

ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
rdate -s time.bora.net

저걸 만들고 보니 이미 예전에 이렇게 만들어둔 스크립트도 있었다. 하지만 잘 되는지 어떤지는 모르겠다. 이미 서버 시간은 맞은 상태였으니까;

2. 자바 시간대 확인하기

public class DateConfirm {

    public static void main(String[] args) {
        System.out.println(new Date().toGMTString());
        System.out.println(new Date().getTimezoneOffset());

        java.util.TimeZone tz = java.util.TimeZone.getDefault();
        System.out.println("Timezone offset from UTC reported as " +
                (tz.getRawOffset() / 1000 / 60) + " minutes");
        if (tz.getRawOffset() % (15 * 60 * 1000) != 0) {
            System.out.println("Warning: not a multiple of quarter-hours");
        }
        System.out.println(new java.util.Date());
        System.out.println(tz);

        TimeZone tz2;
        Date date = new Date();
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss (z Z)");

        tz2 = TimeZone.getTimeZone("Asia/Seoul");
        df.setTimeZone(tz2);
        System.out.format("%s%n%s%n%n", tz2.getDisplayName(), df.format(date));
    }

}

이것도 어디선가 보고 배껴 만든 코드인데 이걸로 기본 TimeZone을 확인한뒤, TimeZone을 서울로 설정한 다음에 다시 날짜/시간을 찍어본다.

4 Aug 2010 02:13:46 GMT
300
Timezone offset from UTC reported as -360 minutes
Tue Aug 03 21:13:46 CDT 2010
sun.util.calendar.ZoneInfo[id="America/Chicago",offset=-21600000,dstSavings=3600000,useDaylight=true,transitions=235,lastRule=java.util.SimpleTimeZone[id=America/Chicago,offset=-21600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]]
한국 표준시
2010-08-04 11:13:46 (KST +0900)

조금전(8월 4일 오전 11시경..)에 확인한 결과였는데.. 이렇게 결과가 엉망이다. 대신 마지막 값이 제대로 나왔다면 희망이 있다. 즉 TImeZone만 제대로 설정해주면 되는거니깐...

3. 자바 시간 설정하기

톰캣/bin 폴더에 환경 설정용 파일은 setenv.sh가 있으면 그걸 편집하고 없으면 그 안에 자바 옵션을 설정해준다.

export JAVA_OPTS="-server -XX:+UseParallelGC -Xmx768m -XX:MaxPermSize=160m -Djava.awt.headless=true -Dfile.encoding=utf-8 -Duser.timezone=GMT+09:00"

export CATALINA_OPTS="$CATALINA_OPTS -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true"

다른 설정은 뭐 때문에 추가했는지 모르겠고. 아마도 아틀라샨 지라를 설치하면서 해놨을 법한데.. 기억나진 않는다;

저렇게 해두면 톰캣/bin의 startup.sh 파일을 실행할때 저 환경변수가 적용되고 저 톰캣에서 돌고 있는 애플리케이션의 날짜가 제대로 먹히게 된다.

저작자 표시
신고
top




: 1 : ··· : 14 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : 22 : ··· : 2638 :





티스토리 툴바