clock, date, rdate, ntpdate - 시스템 시간정보 관리

 

시스템의 시간을 정확히 설정하는 것은 보안 측면뿐만 아니라 기본 서비스 측면에서도 중요하다. 시간 오류로 인한 문제로 DBMS에서 DB정보가 비정상적으로 처리될 수 있으며, 시스템 Log 정보가 부정확해져 분석이 불가능하게 될수 있다.

 

우선, CMOS의 시각과 시스템 시각을 관리자가 직접 설정할 수 있는 두개의 명령어(clock(hwclock), date)에 대해 배우고, 주기적으로 시간을 체크하고 자동 설정하는 방법(rdate, ntpdate)에 대해서도 알아보겠다.

 

# clock - CMOS의 시간 설정

clock은 CMOS의 시각을 설정할 수 있는 명령어이다. CMOS의 시각을 가져와 시스템운영체제 시각으로 설정할 수 있으며, 반대로 시스템 운영체제 시각을 CMOS의 시각으로 설정할 수 있다. date명령어는 단순히 시스템 즉, 시스템 운영체제의 시각을 설정하는 것이며 서버의 CMOS시각을 설정할 수는 없다. 시스템이 부팅될 때에는 CMOS의 시각이 시스템 운영체제시각에 넘겨져서 부팅 시 초기시간으로 설정된다. 따라서 부팅시마다 지속적으로 정확한 시각설정이 필요하다면 clock명령어로 CMOS의 시각을 정확하게 설정해 두어야 한다.

 

clock애서 사용되는 옵션은 아래와 같다.

-u : CMOS의 시각을 국제시각으로 조정한다.
-r : CMOS의 시각을 출력한다.
-w : 리눅스시스템 시각으로 CMOS시각을 조정한다.
-s : CMOS의 시각으로 리눅스시스템시각을 조정한다.
-a : CMOS의 시각으로 리눅스시스템시각으로 조정하고 다시 CMOS에 조정한다.

아래는 CMOS의 시간과 운영체제의 시간에 대해 비교설명한 것이다.

    구분                            CMOS 시간        운영체제시간
    의미  메인보드에 있는 ROM-BIOS에서 인식하고 있는 시간.
 즉, 하드웨어적인 의미의 시간. 
 운영체제에서 인식하는 시간
 리눅스에서 인식하는 시간
 커널에서 인식하는 시간
    구분  하드웨어적인 의미의 시간  소프트웨어적인 의미의 시간
    관계  운영체제(리눅스)가 부팅시 마다 CMOS의 시간을 가져와서 운영체제에 적용함.
 따라서 운영체제의 시간이 CMOS시간에 다소 종속됨.
 변경방법 clock(hwclock)명령어로 CMOS시간을 변경할 수 있음.  data명령어로 운영체제의 
 시간을 변경할 수 있음.

 

* CMOS의 시각과 시스템 시각을 가각 확인하기

CMOS의 시각을 확인하고자 할때에는 clock명령어에 -r옵셕을 사용한다.

[root@inter-devel ~]# clock -r
2009년 10월 14일 (수) 오후 11시 09분 45초  -0.091976 seconds
[root@inter-devel ~]#

 

리눅스서버의 시스템(운영체제)시각을 확인하고자 한다면 date 명령어를 사용한다.

[root@inter-devel ~]# date
2009. 10. 14. (수) 23:11:33 KST
[root@inter-devel ~]#

 

* 리눅스시스템시각으로 CMOS시각 설정하기

대부분의 리눅스시스템의 시각은 cron에서 주기적으로 맞추는 설정을 해두게 되므로 리눅스시스템의 시각이 CMOS의 시각보다는 정확하다고 생각하므로 리눅스시스템의 시각으로 CMOS의 시각을 설정하기 위하여 "clock -w"로 CMOS 시각을 수정하였다.

 [root@inter-devel ~]# clock -w

 

* CMOS의 시각으로 리눅스시스템 시각을 설정한다.

이번에는 반대로 CMOS시각으로 리눅스시스템의 시각을 설정한 것이다.

 [root@inter-devel ~]# clock -s

 

* CMOS로 시스템시각설정 후 다시 CMOS시각을 설정하기

clock명령어에서  -a옵션을 사용하면 /etc/adjtime파일에서 3가지의 숫자를 읽어서 그 값을 참조하여 CMOS의 시각으로 리눅스시스템의 시각을 설정한 후에 다시 CMOS의 시각을 설정한다. 

 [root@inter-devel ~]# clock -a

 

 

# date - 시스템 날짜, 시간을 확인하고 설정

date명령어는 현재 서버의 날짜와시간을 확인하거나 설정할 수 있는 명령어이다. 가끔씩 서버의 날짜와 시간이 조금씩 틀리게되어 있는 경우가 있다. 이런경우에 이 명령어를 이용하여 현재서버의 날짜와시간을 확인하고 정확하게 설정하는 작업을 하기위해 사용한다.  이 명령어는 rdate와 비교를 하시면 좀 더 정확한 이해를 할 수 있다.

리눅스 서버는 새로 부팅을 하거나 재부팅을 할 때에는 서버의 CMOS에서 시간정보를 가져와서 사용한다. 따라서 CMOS의 시간이 틀릴 경우에 date명령어로 시간정보를 맞추었다 하더라도 시스템을 재부팅하면 시간정보가 틀리게 된다. 즉, data명령어에서 무엇보다 중요한 것은 clock명령어와의 정확한 구분을 할 수 있어야 한다.

 

date로 날짜와 시간을 새롭게 설정할 때에는  "date MMDDhhmmYY" 와 같은 형식을 사용하면 된다. 그리고 각 인수들은 아래와 같은 의미를 가지고 있다. 서버의 날짜와 시간을 새롭게 설정할 수 있는 권한은 오로지 root만이 할 수 있다.

       MM     월
       DD      월 중 일
       hh       시
       mm      분
       CC      연도의 처음 두 숫자 (선택적)
       YY      연도의 나중 두 숫자 (선택적)
       ss       초 (선택적)

 

또한 date는 지정된 형식에 맞는 출력을 할 수 있다. 즉 형식에 맞는 출력을 하고자 한다면 "%"지시자를 사용하여 아래 설정된 문자를 앞에 붙여 사용한다.

 시간 필드:

       %H     시 (00..23)
       %I      시 (01..12)
       %k     시 ( 0..23)
       %l      시 ( 1..12)
       %M    분 (00..59)
       %p     로케일의 AM 또는 PM
       %r     시간, 12-시간제 (hh:mm:ss [AP]M)
       %s     1970-01-01 00:00:00 UTC (비표준 확장기능)로 부터 경과된 초
       %S     초 (00..61)
       %T     시간, 24-시간 (hh:mm:ss)
       %X     로케일에서 정의한 시간 표현(%H:%M:%S)
       %Z     시간대 (에, EDT), 시간대를 결정할 수 없는 때는 아무 값도 출력하지 않는다.

        

 날짜 필드:

       %a     로케일의 약식 요일 이름 (Sun..Sat)
       %A     로케일의 완전한 요일 이름, 가변 길이 (Sunday..Saturday)
       %b     로케일의 약식 월 이름 (Jan..Dec)
       %B     로케일의 완전한 월 이름, 가변 길이 (January..December)
       %c     로케일의 날짜와 시간 (Sat Nov 04 12:02:33 EST 1989)
       %d     월 중 일 (01..31)
       %D     날짜 (mm/dd/yy)
       %h     %b 와 동일
       %j     연 중 일 (001..366)
       %m     월 (01..12)
       %U     연 중 주 번호, 일요일을 주의 첫번째 날로 생각 (00..53)
       %w     요일 번호 (0..6), 0 은 일요일
       %W     연 중 주 번호, 월요일을 주의 첫번째 날로 생각 (00..53)
       %x     로케일의 날짜 표현식 (mm/dd/yy)
       %y     연 중 일의 마지막 두 숫자 (00..99)
       %Y     연 (1970...)

 

또한 date는 다음과 같은 옵션을 이용하여 다양한 출력형식을 표현할 수 있다.

       -d datestr, --date datestr

위의 옵션은 datestr에 지정된 형식대로 출력하게 된다.

 

 

쉬운 예부터 보도록 하겠다.

아래의 예는 현재 서버의 날짜와 시간을 확인한 것이다.

[root@inter-devel ~]# date
2009. 10. 14. (수) 23:11:33 KST
[root@inter-devel ~]#

 

다음은 현재 서버의 날짜와 시간을 새롭게 설정한 것이다.

[root@host1 root]# date 050601012003
2003. 05. 06. (화) 01:01:00 KST

[[root@host1 root]# date
2003. 05. 06. (화) 01:01:06 KST
[root@host1 root]#

위의 예에서 새롭게 설정한 날짜와 시간은 2003년 5월 6일 01시 01초입니다. 그리고 date라는 명령어로 새롭게 설정된 날짜와 시간을 확인한 것이다.

 

아래의 예는 지금으로 부터 5일전의 날짜와 시간정보를 확인하고할때 사용하는 옵션이다.

[root@host1 root]# date --date '5 days ago'
2003. 09. 04. (목) 17:02:51 KST
[root@host1 root]#

 

다음의 예는 5개월하고 3일 후의 날짜와 시간정보를 출력하는 예이다.

[root@host1 root]# date --date '5 months 3 day'
2004. 02. 12. (목) 17:03:48 KST
[root@host1 root]#

 

올해 크리스마스 날짜를 출력하는 예입니다.

[root@host1 root]# date --date '25 Dec' +%j
359
[root@host1 root]#

 

 

--------------------------------------------------------------------------

 

지금까지 관리자가 직접 시간을 설정하는 것을 알아보았고. 이제는 시스템 시간을 주기적으로 동기화하는 작업에 대해서 알아보겠다.

 

# rdate - 원격타임서버로 부터 날짜시간정보 가져오기 I

rdate는 지정한 원격지의 타임서버로 부터 날짜시간정보를 받아와 보여주거나 날짜시간설정을 하는 명령어이다.

레드햇계열 및 여타 배포판에서도 별도의 설치과정 필요없이 사용할 수 있다.

 

사용형식

 rdate [-p][-s][-u][-l]  [타임서버]

 

* 원격타임서버의 시간정보 확인하기

-p옵션을 사용하면 지정한 원격지의 타임서버(아래의 예에서는 time.bora.net)에서 시간정보를 가져와서 보여준다.

[root@host1 root]# rdate -p time.bora.net
rdate: [time.bora.net]  Tue Sep  9 11:44:25 2003

즉, 위의 예는 원격 타임서버인 time.bora.net서버에서 현재 날짜시간정보를 가져와서 확인한 예이다.

 

* 원격타임서버의 시간정보 가져와서 현재로컬서버의 시간 맞추기

현재 시스템의 날짜시간정보가 틀리다는 것을 확인하고 원격지의 타임서버에서 날짜시간정보를 가져와서 현재 시스템에 적용을 한 것이다.  날짜시간설정을 하려면 -s옵션을 사용해야한다.

 [root@host1 root]# date                                (현재시스템의 날짜시간정보 확인)
2003. 09. 07. (일) 01:30:01 KST
[root@host1 root]# 
[root@host1 root]# rdate -s time.bora.net   (타임서버에서 날짜시간정보를 가져와 적용함)
[root@host1 root]# 
[root@host1 root]# date                                 (현재시스템의 변경적용된 날짜시간정보 확인)
2003. 09. 09. (화) 11:45:40 KST
[root@host1 root]#

 

참고로 사용할 수 있는 타임서버(Time Server)의 종류로는 다음과 같은 것들이 있다.
time.bora.net (보라넷)
time.kriss.re.kr (한국표준과학연구원)

 

* 재부팅시 자동 날짜시간정보 사용하기

서버관리자는 매번 이런 시간을 직접 맞추어야하는 번거로움이 있을 것이다. 이런 경우에는 다음과 같이 /etc/rc.d/rc.local 파일에 명령어를 넣어 두거나 주기적인 시간설정을 위해 cron에 넣어두기도 한다.

 

서버가 재부팅할 때마다 위의 시간설정을 하고자 한다면 /etc/rc.d/rc.local 파일에 다음과 같은 설정을 넣어두면 된다.

## Set the date & time ## 
/usr/bin/rdate -s time.kriss.re.kr
/sbin/clock -w

 

위의 설정에 대해 설명하면

/usr/bin/rdate -s time.kriss.re.kr

위의 rdate는 time.kriss.re.kr이라는 타임서버(time server)의 시각을 가져와서 현재 서버의 시각을 설정한다.

 

/sbin/clock -w

위의 "clock -w"는 현재 시스템의 시각정보를 CMOS의 시각을 재설정한다.

 

이와 같이 해두면 CMOS의 시각정보를 재설정하였기 때문에 재부팅을 하더라도 현재 재설정된 시각정보를 그대로 유지하게 된다.

 

* 주기적으로 cron에 의한 날짜시간정보 적용

이번에는 cron설정으로 날짜시간정보를 주기적으로 설정하는 예이다.

cron설정은 서버의 계정사용자라면 누구나 사용할 수 있지만 서버의 전체적인 날짜시간정보를 적용하려면 반드시 root권한으로 root의 cron설정을 해야한다. 그냥 root권한으로 "corntab -e"하면 vi모드가 열리면서 root의 cron파일을 편집할 수 있다.

  00 01 * * * su - root /usr/bin/rdate -s time.kriss.re.kr && /sbin/clock -w

참고로 root를 포함한 개별사용자의 cron파일의 보관장소는 /var/spool/cron이다.

 

 

# ntpdate - 원격타임서버로 부터 날짜시간정보 가져오기 II

NTP는 Network Time Protocol 약자로서 rdate와 비슷한 기능을 제공한다. ntpdate는 rdate를 이용한 방법보다 시간을 0.01초 이하의 오차로 맞출 수 있다.

 

ntpdate는 rdate와 다르게 별도 설치 작업이 필요하다.

# rpm -qa | grep ntp 명령으로 "ntp-버젼"이 출력되지 않으면

 

# yum install ntp   또는 
   
http://rpmfind.net 에서 "ntp" 로 검색해서 배포판에 해당하는 패키지를 설치한다.

 

ex1) OS : Fedora Core 3 
#wget 
ftp://rpmfind.net/linux/fedora/core/3/i386/os/Fedora/RPMS/ntp-4.2.0.a.20040617-4.i386.rpm

#rpm -Uvh ntp-4.2.0.a.20040617-4.i386.rpm

 

ex2) #rpm -Uvh ftp://rpmfind.net/linux/fedora/core/3/i386/os/Fedora/RPMS/ntp-4.2.0.a.20040617-4.i386.rpm

 

동기화하는 방법은 rdate와 같으며, rdate 명령부분에 아래와 같이 입력하면 된다.

 # ntpdate time.kriss.re.kr

 

* 재부팅시 자동 날짜시간정보 사용하기

## Set the date & time ## 
/usr/sbin/ntpdate time.kriss.re.kr

/sbin/clock -w

 

* 주기적으로 cron에 의한 날짜시간정보 적용

  00 01 * * * su - root /usr/sbin/ntpdate time.kriss.re.kr && /sbin/clock -w

 

어느 것을 사용하시든 시간이 동기화 되어 local time 이 바뀌게 된다.

 

** 서버의 정확한 시간을 위한 설정시 /etc/rc.d/rc.local 파일에 등록하는 것보다는 가능한 root의 crontab에 등록하는 것이 좋다.

출처 -  http://blog.naver.com/yswon72/91139665










(우분투 리눅스 Ubuntu Linux 서버 버전을 기준으로 설명)

리눅스를 설치할 때 시간대(타임존;Timezone)를 맞추지 않으면, 컴퓨터 시계가 미국 태평양 시간인 PST로 나옵니다. (서머타임 기간에는 PDT.) 즉 캘리포니아 시간으로 나옵니다. 이것을 한국 표준시인 KST 로 변경하는 방법입니다.


(1)

ls /usr/share/zoneinfo


zoneinfo 란 디렉토리의 내용을 ls 명령으로 보면 Asia 라는 디렉토리가 있을 것입니다. 그리고

ls /usr/share/zoneinfo/Asia


이제 이렇게 쳐보면, Seoul 즉 '서울'이라는 파일이 있을 것입니다. 우분투가 아닌 다른 배포본에서는 좀 다를 수도 있으니 정확한 위치를 파악해야 합니다.



(2)
이제 Seoul 이라는 파일에 대한 심볼릭 링크를 /etc/localtime 이라는 이름으로 만들어 주어야 합니다.

ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime


아무 메시지도 나오지 않아야 성공입니다. (위의 명령에서 ln 은, LN 을 소문자로 쓴 것임)



이제 date 명령을 쳐보면, 날짜 뒤에 PST나 PDT대신에, 한국 시간인 KST가 나올 것입니다.





출처 - http://mwultong.blogspot.com/2006/10/kst-linux-timezone.html










Hi,


we have one NTP server which is Crashed. we setup the new NTP server on RHEL-5. it is sync properly with other NTP server. now we are facing new problem. when trying rdate to new NTP server it showing 


rdate -p 172.25.32.1

"rdate: couldn't connect to host 172.25.32.1: Connection refused"



/etc/ntp.conf


restrict default nomodify notrap

restrict 127.0.0.1

restrict 172.25.0.0 mask 255.255.0.0 none

server 172.25.32.250

fudge 127.127.1.0 stratum 10

driftfile /var/lib/ntp/drift

keys /etc/ntp/keys



Thanks,

Dinesh






hi,


This problem is solve, issue was not with NTP but with xinetd service.

when i run these commands on 172.25.32.1 problem is solved.


chkconfig time-dgram on

chkconfig time-stream on

service xinetd restart




출처 - http://www.linuxquestions.org/questions/linux-server-73/rdate-couldn't-connect-to-host-648207/













'System > Linux' 카테고리의 다른 글

top 명령어  (0) 2011.09.27
ngrep 다운로드 및 사용법 (옵션)  (1) 2011.09.23
linux - grep, egrep, fgrep  (0) 2011.08.05
linux - UID, EUID  (0) 2011.07.26
리눅스 환경에서 C 프로그래밍  (0) 2011.02.10
Posted by linuxism
,