
Đồng bộ thời gian VPS theo giờ địa phương với Chrony
Sơ đồ trang
Khi quản lý các máy chủ ảo (VPS) 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
Bài viết liên quan
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: yes và NTP 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.