Đồng bộ thời gian VPS theo giờ địa phương với Chrony

Khi nếu bạn không để ý sẽ bị sai lệch thời gian dù bạn chọn đúng Múi giờ trong phần cài đặt website thì chúng cũng sẽ hiển thị không chính xác và trong bài viết này mình sẽ hướng dẫn cách để đồng bộ thời gian theo giờ địa phương cho các VPS sử dụng hệ điều hành AlmaLinux/CentOS/RHEL và Ubuntu/Debian

Đây là case mình gặp khi quản lý các VPS của khách + fix để thực hiện được chức năng chặn đăng nhập vào website vào buổi sáng, cụ thể chặn hacker login vào WordPress từ khoảng thời gian từ 0h sáng đến 6h sáng (Cần check chính xác thời gian nếu không sẽ bị khoá khi code check timezone localtime không đúng)

Đồng bộ thời gian VPS theo giờ địa phương

Trước tiên bạn có thể check timezone với lệnh timedatectl (áp dụng được cho các hệ điều hành AlmaLinux/CentOS/RHEL và Ubuntu/Debian)

[root@almalinux-vutruso~]# timedatectl
Local time: Thu 2024-08-01 03:44:18 +07
Universal time: Wed 2024-07-31 20:44:18 UTC
RTC time: Wed 2024-07-31 20:44:20
Time zone: Asia/Ho_Chi_Minh (+07, +0700)
System clock synchronized: no
NTP service: n/a
RTC in local TZ: no

Đầu ra cho thấy timezone đã đúng là Asia/Ho_Chi_Minh

Nếu VPS của bạn hiện sai location luôn có thể dùng lệnh sau để list các timezones khả dụng

timedatectl list-timezones

Đặt múi giờ mong muốn với lệnh (thay Asia/Ho_Chi_Minh thành múi giờ bạn muốn)

sudo timedatectl set-timezone Asia/Ho_Chi_Minh

Sau đó xác nhận thay đổi

timedatectl

Để đồng bộ thời gian hệ thống thì bạn cần dùng tới Chrony và NTP (Network Time Protocol) đây là hai dịch vụ phổ biến để đồng bộ hóa thời gian hệ thống trên các VPS chạy các hệ điều hành như AlmaLinux và Ubuntu.

Đối với hệ thống Cũ (Nếu timedatectl không có sẵn)

Bạn có thể kiểm tra múi giờ hiện tại:

cat /etc/timezone

Thiết lập múi giờ

sudo ln -sf /usr/share/zoneinfo/Asia/Ho_Chi_Minh /etc/localtime

Khởi động lại dịch vụ thời gian của hệ thống

sudo service ntp restart

Trở lại với ví dụ đầu tiên mà tôi đã nêu ra, đầu ra của bạn timedatectl cho thấy múi giờ được đặt đúng thành Asia/Ho_Chi_Minh, nhưng đồng hồ hệ thống không được đồng bộ hóa và dịch vụ NTP không hoạt động. Nên phải bật đồng bộ hóa NTP để đảm bảo thời gian của máy chủ chính xác.

Cài đặt Chrony (NTP Client)

sudo dnf install chrony

Khởi động và kích hoạt dịch vụ Chrony

sudo systemctl start chronyd
sudo systemctl enable chronyd

Xác minh trạng thái dịch vụ Chrony

sudo systemctl status chronyd

Bật đồng bộ hóa thời gian

sudo timedatectl set-ntp true

Xác minh đồng bộ thời gian

timedatectl

Sau khi chạy các lệnh kia thì đầu ra sẽ đúng yêu cầu như sau:

[root@almalinux-vutruso~]# timedatectl
Local time: Wed 2024-07-31 20:45:25 +07
Universal time: Wed 2024-07-31 13:45:25 UTC
RTC time: Wed 2024-07-31 13:45:26
Time zone: Asia/Ho_Chi_Minh (+07, +0700)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

Local time: Wed 2024-07-31 20:45:25 +07 là chính xác với thời điểm mình viết bài viết này thay vì Local time: Thu 2024-08-01 03:44:18 +07 ở bước đầu mình check và các thông tin System clock synchronized: yesNTP service: active đều active như bạn có thể thấy ở phần bôi đậm.

Bash script thay đổi timezone cho VPS

Nếu bạn có nhiều VPS và cần thao tác nhanh có thể sử dụng bash script được mình đóng gói này nhé, áp dụng cho 2 hệ điều hành Almalinux và Ubuntu

1. Tạo file: vts_set_timezone.sh sau đó dán code phía dưới vào.
2. Cho phép script này có quyền thực thi với lệnh chmod +x vts_set_timezone.sh
3. ./set_timezone.sh để chạy script
4. Tận hưởng

#!/bin/bash

# Set timezone
TIMEZONE="Asia/Ho_Chi_Minh"

# Function to set the timezone and configure NTP
vutruso_configure_timezone_and_ntp() {
    # Set the timezone using timedatectl
    sudo timedatectl set-timezone $TIMEZONE

    # Verify the timezone change
    echo "Timezone has been set to: $(timedatectl | grep 'Time zone')"

    # Install and configure chrony
    if [ -f /etc/redhat-release ]; then
        # AlmaLinux (RHEL-based)
        sudo dnf install -y chrony
        sudo systemctl start chronyd
        sudo systemctl enable chronyd
    elif [ -f /etc/lsb-release ]; then
        # Ubuntu
        sudo apt update
        sudo apt install -y chrony
        sudo systemctl start chrony
        sudo systemctl enable chrony
    else
        echo "Unsupported OS. This script supports AlmaLinux and Ubuntu."
        exit 1
    fi

    # Enable NTP
    sudo timedatectl set-ntp true

    # Verify the NTP change
    echo "NTP has been enabled: $(timedatectl | grep 'NTP synchronized')"
}

# Execute the configuration function
vutruso_configure_timezone_and_ntp

Hy vọng bài viết sẽ giúp ích được cho nhiều người.

5/5 - (79 votes)

donate Nếu bạn thấy bài viết có ích bạn có thể donate cho team hoặc chia sẻ bài viết này. Ngoài ra bạn có thể yêu cầu thêm bài viết tại đây
Đã copy
user

Yêu thích Võ thuật và Công nghệ thông tin, thích viết và chia sẽ về 2 lĩnh vực này thế thôi :D

Bài viết liên quan