Computer >> 컴퓨터 >  >> 시스템 >> Linux

CentOS 날짜·시간·시간대 설정 및 NTP 시간 동기화 완벽 가이드

이 글에서는 CentOS Linux에서 날짜와 시간을 설정하고, 시간대(Timezone)를 변경하며, NTP 서버와 시간을 동기화하는 방법과 자주 발생하는 문제 해결 방법까지 상세히 알아보겠습니다.

서버의 두 가지 시계: 하드웨어 시계와 소프트웨어 시계

서버에는 두 종류의 시계가 존재합니다. 서버 전원이 꺼져 있어도 계속 작동하는 하드웨어 시계(Real-Time Clock)와 운영체제가 사용하는 소프트웨어 시계입니다. 이 두 시계의 시간은 서로 다를 수 있습니다.

운영체제가 부팅되면 소프트웨어 시계는 하드웨어 시계를 기준으로 초기화되며, 이후 OS에 의해 조정될 수 있습니다. 대부분의 애플리케이션은 소프트웨어 시계의 시간을 기준으로 동작합니다.

Hwclock으로 하드웨어 시간 확인 및 설정

Linux에서 hwclock 명령어를 사용하면 하드웨어 시간을 확인할 수 있습니다.

  • hwclock --localtime — 보정 없이 하드웨어 시간 그대로 확인
  • hwclock --utc — 하드웨어 시계가 UTC 기준일 때의 시간 표시
# hwclock --localtime
2020-10-12 06:12:02.912866-04:00

# hwclock --utc
2020-10-12 02:12:18.915319-04:00

시스템 시간을 기준으로 하드웨어 시간을 설정하려면 다음 명령어를 실행합니다.

# hwclock --systohc

원하는 특정 시간으로 하드웨어 시계를 직접 설정하려면 아래 명령어를 사용합니다.

# hwclock --set --date "11 Oct 2020 17:30"

CentOS에서 시간 수동 설정하기

Linux에서는 date 또는 timedatectl 도구를 사용해 소프트웨어 시간을 확인하고 설정할 수 있습니다. date 명령어를 파라미터 없이 실행하면 서버의 현재 시간이 표시됩니다.

# date
Sun Oct 11 22:14:54 EDT 2020

시간을 수동으로 설정하려면 date 명령어에 추가 파라미터를 지정합니다. 형식은 MMDDhhmm(월/일/시/분)입니다.

# date MMDDhhmm

# 예시: 10월 26일 17시 40분으로 설정
# date 10261740

날짜, 시간, 시간대, 동기화 설정, 서머타임(DST) 등 더 자세한 정보를 확인하려면 timedatectl을 사용하세요. 서버의 시간 관련 설정을 한눈에 파악할 수 있습니다.

timedatectl로도 시간을 변경할 수 있습니다.

# timedatectl set-time '2020-10-11 17:51:00'

CentOS에서 시간대(Timezone) 설정 방법

CentOS Linux에서 시간대를 변경하는 방법은 크게 두 가지입니다.

  • timedatectl 사용
  • tzdata 사용 (/etc/localtime 교체)

1. timedatectl로 시간대 변경

# timedatectl set-timezone Canada/Pacific
# date

2. tzdata로 시간대 변경

이 방법은 /etc/localtime 파일을 원하는 시간대 파일로 교체하는 방식입니다. 전체 시간대 목록은 /usr/share/zoneinfo/ 디렉터리에 있습니다.

먼저 기존 localtime 파일을 백업합니다.

# mv /etc/localtime /etc/localtime.bak

그다음 원하는 시간대에 대한 심볼릭 링크(symlink)를 생성합니다.

# ln -s /usr/share/zoneinfo/Canada/Pacific /etc/localtime

NTP 서버와 시간 자동 동기화 설정

외부 NTP(Network Time Protocol) 서버와 호스트의 시간을 자동으로 동기화하도록 설정할 수 있습니다. 이를 위해서는 ntp 서비스를 설치해야 합니다. CentOS 7에서는 yum으로 설치할 수 있습니다.

# yum install ntp -y

설치 후 ntpd 서비스를 시작하고 부팅 시 자동 시작되도록 등록합니다.

# systemctl start ntpd.service
# systemctl enable ntpd.service

서비스가 정상적으로 실행 중인지 확인합니다.

# service ntpd status
Redirecting to /bin/systemctl status ntpd.service
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2020-10-11 15:37:33 +06; 5min ago
Main PID: 3057 (ntpd)
CGroup: /system.slice/ntpd.service
└─3057 /usr/sbin/ntpd -u ntp:ntp -g

동기화에 사용할 NTP 서버는 /etc/ntp.conf 파일에 지정합니다.

server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org

시간은 순차적으로 동기화됩니다. 첫 번째 NTP 서버에 접근할 수 없으면 두 번째 서버가 사용되는 방식입니다.

특정 NTP 서버와 즉시 수동 동기화하려면 다음 명령어를 사용합니다.

# ntpdate 192.168.1.23

기본적으로 ntpd는 '11분 모드(11 minute mode)'가 활성화되어 있어 약 11분마다 시간이 동기화됩니다. ntpd 데몬을 사용할 수 없는 환경이라면 cron을 통해 주기적으로 동기화하도록 설정할 수도 있습니다.

# ntpdate pool.ntp.org

CentOS 8에서 Chronyd로 시간 동기화하기

CentOS 8부터는 ntp와 ntpdate가 공식 저장소에서 제거되었으므로, 대신 chrony를 사용해야 합니다.

chrony의 주요 장점은 다음과 같습니다.

  • 빠르고 정확한 시간 동기화 속도
  • 마스터 클럭에 지속적인 접근이 어려운 환경에서도 안정적 동작 (ntpd는 주기적인 요청 필요)
  • 동기화 직후 시간을 급격히 변경하지 않아 실행 중인 프로그램에 문제가 발생하지 않음
  • 시스템 리소스를 적게 사용

CentOS에는 기본적으로 chrony가 설치되어 있지만, 만약 설치되어 있지 않다면 dnf로 설치합니다.

# dnf install chrony

설치 후 서비스를 시작하고 부팅 시 자동 시작되도록 등록합니다.

# systemctl start chronyd
# systemctl enable chronyd

chronyd 서비스 상태를 확인합니다.

# systemctl status chronyd

시간 동기화가 정상 작동하는지 확인하려면 다음 명령어를 실행합니다.

# timedatectl status
NTP Service: active

chrony의 설정 파일은 /etc/chrony.conf입니다. 이 파일에서 동기화에 사용할 NTP 서버 목록을 지정할 수 있습니다. ntp와 마찬가지로 chrony도 chronyc라는 명령줄 인터페이스를 제공합니다.

현재 시간 동기화 상태 정보를 확인하려면:

# chronyc tracking

동기화 서버 정보를 확인하려면:

# chronyc sources

특정 날짜와 시간을 수동으로 설정하려면 date 명령어를 사용할 수 있으며, 이 경우 먼저 chronyd 데몬을 중지해야 합니다.

CentOS 시간 동기화 시 자주 발생하는 오류와 해결법

이 섹션에서는 timedatectl, ntp 사용 시 자주 나타나는 대표적인 오류들을 살펴보겠습니다.

NTP 소켓 사용 중 오류

수동으로 시간을 동기화할 때 다음과 같은 오류가 발생할 수 있습니다.

# ntpdate pool.ntp.org
ntpdate [26214]: the NTP socket is in use, exiting

이 오류는 ntpd 데몬이 이미 실행 중이어서 수동 동기화가 차단된 것입니다. 수동 동기화를 진행하려면 ntpd 데몬을 먼저 중지하세요.

# service ntpd stop

그런 다음 동기화 명령어를 다시 실행하면 됩니다.

자동 동기화 활성화 오류

timedatectl 사용 시에도 유사한 오류가 발생할 수 있습니다.

Failed to set time: Automatic time synchronization is enabled.

timedatectl에서 자동 동기화를 비활성화한 뒤 시간을 설정해야 합니다.

# timedatectl set-ntp 0
# timedatectl set-time '2020-11-12 17:41:00'

시간대 데이터 누락 오류

서버에 시간대 데이터가 설치되어 있지 않으면 localtime 심볼릭 링크 생성이 불가능할 수 있습니다. 이 경우 tzdata 패키지를 설치하면 됩니다.

# yum install tzdata -y

방화벽 관련 오류

수동 동기화 중 다음과 같은 오류가 발생할 수도 있습니다.

11 Oct 21:11:19 ntpdate[897482]: sendto(xx.xx.xx.98): Operation not permitted

이 경우 firewalld 또는 iptables 규칙을 점검하여 UDP 123번 포트가 서버에서 열려 있는지 확인하세요. 또한 일부 NTP 호스트는 검증 과정에서 일시적으로 접근 불가능할 수 있다는 점도 참고하세요.