로그인
회원가입
Loading...
Loading...

Board

게시판

우분투서버 14.04 서버시간 설정과 ntp 동기화 문제 : timezone, timedatectl, ntp, ntpdate

새 서비스를 설계 하고, mysql 테이블 생성용 스키마를 짜면서 datetime 타입의 필드에 디폴트값으로 current timestamp를 할당하려고 하였다. 실수등을 방지하기 위해 mysql 공식 사이트의 다큐먼트를 보고 있는데, 아래와 같은 문구가 보였다.

By default, the current time zone for each connection is the server's time.

기본값으로, 각 커넥션당 current time zone 은 서버 시간이라고 한다.

혹시나 싶어 일단 서버 시간을 확인하였는데... 아래처럼 나왔다.



PDT(Pacific Daylight Time) 이므로 타임존 설정이 안되어 있다. 이 상태에서도 서버 시간이 정확한지 알수 있는 방법은 아주 많겠지만, 어쨋든 타임존 설정이 한국표준시로 안되어 있다는건 시각적으로 바로 서버 시간이 맞는지 확인하기 불편하며, mysql 에서 사용된 datetime 타입 칼럼의 경우 한국시간대가 아니라 미국의 PDT 시간대로 표현될것이므로 원하지 않는 결과가 나올것이다.

이 리눅스 서버는 우분투 12.04에서 14.04로 얼마전 업그레이드 하였다. 업그레이드후 아파치 unique_id 모듈의 사용을 위해 서버 시간의 정확도가 필요하기에 ntp(network time protocol) 동기화를 하였던 기억이 있다. 이 시점에선 타임존만 바꾸어서 보면 서버 시간이 정확할것이라 예상중이었다.

타임존 변경은 커맨드라인 명령어도 있지만, 우분투 서버에서는 dpkg-reconfigure tzdata 라는 훌륭한 도구가 있다.

sudo dpkg-reconfigure tzdata



dpkg-reconfigure 사용법은 아주 간단하다. 화살키로 리스트내에서 이동하고, 엔터키로 선택하며, 탭키로 현재 포커스를 항목간 이동시킬수 있다. 화살키를 이용하여 Asia를 선택하고 엔터를 치면 아시아 국가의 도시들이 나오는데 우리는 Seoul을 고른후 엔터를 치면 된다. Timezone Asia/Seoul 즉, KST(한국 표준시)를 확실하게 선택하였다. 결과값이 아래처럼 나왔다.



문제는 여기서 시작이다. 타임존을 맞추었는데, 서버시간이 내 컴퓨터시간과 약 40분이 다르다. 핸드폰을 보았느데 역시 마찬가지다. 마지막으로 아래 사이트를 통해 확인하였지만 역시 마찬가지다.
http://ko.thetimenow.com/kst/korea_standard_time

즉, 서버 시간이 틀렸다는 결론이다. 이 상태에서 서비스가 시작되었다면, mysql 테이블에 들어가는 값은 잘못된 타임스탬프가 들어갈것이며, 웹서비스의 근간이 되는 서버시간이 어긋나 있으므로 mysql 뿐만 아니라 php부터 자바스크립트나 쿠키등 기타 시간관련된 문제들이 꾸준히 발생하였을것이다.

그렇다면 ntp 동기화를 했던것이 바로 얼마전인데 왜 이럴까? 문제점 해결을 위해 구글링으로 찾은 명령어

sudo datetimectl

실행결과 화면을 보면...



웬지 NTP synchronized: no 라는 것이 눈에 밟힌다. 다시 구글링후 ntp 설치를 진행한후 다시 확인.

sudo apt-get install ntp
sudo datetimectl




NTP synchronized 항목이 yes가 되었다. 조금 기쁜데... 엉??? 여전히 시간이 안맞다. ㅠ.ㅠ 난감해서 머리가 아파온다. datetimectl 표시상으로 동기화가 되었다고 하는데 시간은 여전히 40분 차이가 난다.

몇가지 검색결과를 토대로 시도해서 나온 내 경우의 정답은... datetimectl 과 ntpdate의 '충돌'이 문제였으며, 이 글의 앞부분에 적혀 있듯이 분명히 ntp 동기화를 했다는 '기억'이 있었는데 이게 화근이었다. 어렴풋한 기억으로 sudo ntpdate time.bora.net 같은 명령어로 동기화를 진행하였지 않나 싶다.


문제 해결 방법



ntpdate 언인스톨
sudo apt-get remove ntpdate

실행중인 ntp 데몬을 멈추고, 강제로 시간 동기화, ntp 실행
sudo service ntp stop
sudo ntpd -gq
sudo service ntp start


마지막으로 확인해보니...
sudo datetimectl


드디어 서버 시간이 제대로 작동하게 되었다 !!!

---

* 참조 : datetimectl 로 확인후 NTP enabled: No 라고 나온다면 아래 명령어로 해결이 된다.

timedatectl set-ntp true

COMMENTS