이 글에서는 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 호스트는 검증 과정에서 일시적으로 접근 불가능할 수 있다는 점도 참고하세요.