Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Linux

CentOS: Cách đặt Ngày, Giờ, TimeZone và Đồng bộ NTP

Trong bài viết này, chúng ta sẽ chỉ cho bạn cách đặt thời gian, ngày, múi giờ, đồng bộ thời gian với máy chủ NTP và khắc phục các sự cố điển hình trong CentOS Linux.

Trên máy chủ có hai loại đồng hồ: phần cứng (real-time clock) hoạt động ngay cả khi máy chủ tắt và đồng hồ phần mềm của hệ điều hành. Thời gian trên hai đồng hồ này có thể khác nhau. Sau khi khởi động hệ điều hành, đồng hồ phần mềm dựa trên đồng hồ phần cứng và có thể được điều chỉnh bởi HĐH. Hầu hết ứng dụng sử dụng thời gian đồng hồ phần mềm trong hoạt động của chúng.

Hwclock: Cấu hình thời gian phần cứng

Hwclock dùng để kiểm tra thời gian phần cứng trong Linux:

  • hwclock --localtime — kiểm tra thời gian phần cứng không điều chỉnh
  • hwclock --utc – hiển thị thời gian nếu đồng hồ phần cứng hiển thị thời gian UTC
# hwclock --localtime
2020-10-12 06:12:02.912866-04:00
# hwclock --utc
2020-10-12 02:12:18.915319-04:00

Để đặt thời gian phần cứng theo thời gian hệ thống, chạy lệnh:
# hwclock --systohc
Để đặt thời gian phần cứng bạn muốn, chạy lệnh sau:
# hwclock --set --date "11 Oct 2020 17:30"

CentOS: Cách đặt Ngày, Giờ, TimeZone và Đồng bộ NTP

Cấu hình thời gian thủ công trong CentOS

Trong Linux, công cụ date hoặc timedatectl được dùng để kiểm tra và đặt thời gian phần mềm. Nếu bạn gọi date không có tham số, nó sẽ hiển thị thời gian hiện tại trên máy chủ của bạn:

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

Nếu bạn muốn đặt thời gian thủ công, bạn có thể dùng date với tham số bổ sung:

# date MMDDhhmm

Ví dụ:

# date 10261740

CentOS: Cách đặt Ngày, Giờ, TimeZone và Đồng bộ NTP

Để lấy thông tin mở rộng về ngày, giờ, múi giờ, cài đặt đồng bộ, cài đặt giờ mùa hè (DST), timedatectl được dùng. Nó cung cấp thông tin chi tiết hơn về cài đặt thời gian trên máy chủ.

CentOS: Cách đặt Ngày, Giờ, TimeZone và Đồng bộ NTP

Timedatectl cũng cho phép thay đổi thời gian:

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

Cách đặt TimeZone trong CentOS?

Để đặt thời gian theo múi giờ của bạn trên CentOS Linux, bạn có thể thay đổi nó thủ công. Để làm điều đó, bạn có thể dùng hai công cụ:

  • timedatectl
  • tzdata

Để thay đổi múi giờ bằng timedatectl, chạy lệnh:

# timedatectl set-timezone Canada/Pacific
# date

CentOS: Cách đặt Ngày, Giờ, TimeZone và Đồng bộ NTP

Hoặc bạn có thể dùng tzdata. Để dùng phương pháp này, thay thế file /etc/localtime bằng file bạn cần. Toàn bộ danh sách múi giờ nằm trong thư mục /usr/share/zoneinfo/. Hãy thay đổi múi giờ thành Canada/Pacific. Sao lưu file locatime hiện tại:

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

Tạo symlink đến múi giờ bạn muốn đặt:
# ln -s /usr/share/zoneinfo/Canada/Pacific /etc/localtime

Cấu hình CentOS đồng bộ thời gian với máy chủ NTP

Bạn có thể cấu hình đồng bộ thời gian tự động trên máy chủ của mình với máy chủ NTP (Network Time Protocol) bên ngoài. Để làm điều đó, bạn phải cài đặt dịch vụ ntp. Ví dụ, bạn có thể cài đặt nó bằng yum trong CentOS 7:

# yum install ntp -y

Sau cài đặt, khởi động dịch vụ ntpd và thêm vào khởi động:

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

Đảm bảo dịch vụ đang chạy:

# 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

Chỉ định máy chủ NTP để đồng bộ thời gian trong /etc/ntp.conf:

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

Thời gian được đồng bộ theo lượt. Nếu máy chủ NTP đầu tiên không khả dụng, máy chủ thứ hai được dùng, v.v.

Bạn có thể đồng bộ thời gian với máy chủ NTP chỉ định thủ công bằng lệnh:

# ntpdate 192.168.1.23

Mặc định, ntpd bật "chế độ 11 phút". Nghĩa là thời gian sẽ được đồng bộ mỗi 11 phút. Nếu bạn không thể dùng daemon ntpd, bạn có thể cấu hình đồng bộ thời gian bằng cron. Thêm lệnh sau vào cron:

# ntpdate pool.ntp.org

Cách đồng bộ thời gian trong CentOS 8 bằng Chronyd?

Trong CentOS 8 bạn sẽ phải dùng chrony để đồng bộ thời gian, vì ntp và ntpdate đã bị loại khỏi kho chính thức.

Lợi ích chính của chrony:

  • Tốc độ và độ chính xác đồng bộ thời gian cao;
  • Hoạt động đúng nếu bạn không có quyền truy cập đồng hồ chính (ntpd yêu cầu yêu cầu định kỳ);
  • Mặc định, thời gian không được sửa đổi ngay sau đồng bộ để ngăn chặn vấn đề cho chương序 đang chạy;
  • Sử dụng ít tài nguyên hơn.

Mặc định, chrony đã được cài đặt trong CentOS Linux, nhưng nếu bạn không có nó vì lý do nào đó, hãy cài đặt:

# dnf install chrony

Giống như bất kỳ dịch vụ nào, chrony cần được khởi động và thêm vào khởi động sau cài đặt:

# systemctl start chronyd
# systemctl enable chronyd

Kiểm tra trạng thái dịch vụ chronyd:

# systemctl status chronyd

CentOS: Cách đặt Ngày, Giờ, TimeZone và Đồng bộ NTP

Để đảm bảo đồng bộ thời gian đang hoạt động, chạy lệnh:

# timedatectl status
NTP Service: active

CentOS: Cách đặt Ngày, Giờ, TimeZone và Đồng bộ NTP

File cấu hình Chrony là /etc/chrony.conf. Chỉ định danh sách máy chủ NTP bạn muốn dùng để đồng bộ. Giống như ntp, chrony có giao diện dòng lệnh: chronyc. Để xem thông tin về tùy chọn đồng bộ thời gian hiện tại, chạy lệnh:

# chronyc tracking

Để xem thông tin về máy chủ đồng bộ:

# chronyc sources

Nếu bạn muốn đặt ngày và giờ cụ thể thủ công, bạn có thể dùng date, nhưng trước đó hãy tắt daemon chronyd.

Các vấn đề thường gặp khi đồng bộ thời gian trong CentOS

Trong phần này, tôi sẽ mô tả các lỗi điển hình xuất hiện khi làm việc với timedatectl, ntp.

Trong quá trình đồng bộ thời gian thủ công, bạn có thể gặp lỗi này:

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

Điều này có nghĩa là daemon ntpd đang chạy và ngăn chặn đồng bộ thời gian thủ công. Để đồng bộ thời gian thủ công, dừng daemon ntpd:

# service ntpd stop

Và chạy đồng bộ lại.

Cùng lỗi có thể xảy ra khi làm việc với timedatectl:

Failed to set time: Automatic time synchronization is enabled.

Bạn phải tắt đồng bộ tự động trong timedatectl:

# timedatectl set-ntp 0

Và chạy lệnh này để đặt thời gian và ngày bạn muốn:

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

Khi làm việc với múi giờ, có thể xảy ra việc chúng không được cài đặt trên máy chủ của bạn và bạn không thể tạo symlink cho localtime. Để làm cho múi giờ có sẵn trên máy chủ, cài đặt công cụ tzdata:

# yum install tzdata -y

Cũng có thể gặp một số lỗi khi đồng bộ thủ công như sau:

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

Trong trường hợp này, kiểm tra quy tắc firewalld/iptables của bạn và đảm bảo cổng UDP 123 mở trên máy chủ. Ngoài ra, một số máy chủ NTP có thể không khả dụng trong quá trình xác thực.