Múi giờ, locale, và ngôn ngữ hệ thống
Cách đặt múi giờ, bật đồng bộ thời gian, cấu hình locale UTF-8, và tại sao log và cơ sở dữ liệu nên được giữ theo UTC.
Cập nhật 23 tháng 8, 2026
Một máy mới thường chạy ở UTC với một tập hợp locale tối thiểu. Chỉ cần bạn không đọc log hay chạy tác vụ theo lịch, bạn sẽ không nhận ra. Ngay khi cron, email và báo cáo xuất hiện, thời gian và encoding bắt đầu trở nên rất quan trọng.
Múi giờ
timedatectl
timedatectl list-timezones | grep Moscow
timedatectl set-timezone Europe/Moscow
timedatectl hiển thị giờ địa phương, UTC và trạng thái đồng bộ. Dòng System clock synchronized: yes nghĩa là đồng hồ đã được đồng bộ qua mạng.
Nếu tính năng đồng bộ bị tắt:
timedatectl set-ntp true
systemctl status systemd-timesyncd
Trên AlmaLinux và CentOS Stream, chronyd thường chịu trách nhiệm về thời gian:
systemctl enable --now chronyd
chronyc tracking
Locale
Locale quyết định ngôn ngữ của thông báo, encoding và định dạng số cũng như ngày tháng. Mức tối thiểu cần thiết là UTF-8; nếu không, tên tệp và kết quả đầu ra của chương trình bằng tiếng Nga sẽ biến thành dấu hỏi.
Debian và Ubuntu:
apt install -y locales
dpkg-reconfigure locales
localectl set-locale LANG=ru_RU.UTF-8
AlmaLinux và CentOS Stream:
dnf install -y glibc-langpack-ru
localectl set-locale LANG=ru_RU.UTF-8
Kiểm tra:
locale
locale -a | grep -i utf
Các thay đổi áp dụng cho phiên mới—hãy đăng nhập lại qua SSH.
Bố cục bàn phím trong console
Chế độ xem “Screen” (VNC) trong tab “Console” của bảng điều khiển /hosting/vds/m/<id> truyền các phím gõ vào nguyên trạng. Nếu bạn cần gõ tiếng Nga ngay tại đó:
localectl set-keymap ru
Các dịch vụ không cần điều này—UTF-8 là đủ cho chúng.
Những gì nên giữ ở UTC
Việc giữ bản thân hệ thống và cơ sở dữ liệu ở UTC là hợp lý, và chỉ hiển thị giờ địa phương cho người dùng.
- Log ở UTC có thể so sánh giữa các máy và không nhảy khi đồng hồ thay đổi.
- Cơ sở dữ liệu ở UTC không làm hỏng việc tính toán khoảng thời gian.
- Cron tính thời gian theo múi giờ hệ thống: nếu bạn thay đổi múi giờ, hãy đọc lại các lịch trình.
systemctl restart cron
crontab -l
Lỗi thường gặp
| Triệu chứng | Nguyên nhân | Giải pháp |
|---|---|---|
setlocale: LC_ALL: cannot change locale | Client gửi locale của riêng nó, nhưng locale đó không tồn tại trên máy chủ | Tạo locale hoặc gỡ bỏ việc chuyển tiếp LANG trên client |
| Ký tự bị lỗi trong tên tệp | Locale không phải UTF-8 | LANG=ru_RU.UTF-8 và đăng nhập lại |
| Thời gian bị “lệch” vài phút | Tính năng đồng bộ bị tắt | timedatectl set-ntp true |
| Tác vụ chạy sai giờ | Bạn đã thay đổi múi giờ nhưng lịch trình vẫn giữ nguyên | Tính lại crontab |
Hãy thay đổi múi giờ trước khi bạn thiết lập các tác vụ sao lưu và ghi log. Trên một máy đang chạy, thay đổi múi giờ đồng nghĩa với việc phải xem xét lại toàn bộ lịch trình cùng một lúc.