Skip to content
VDS · 操作系统

时区、区域设置与系统语言

如何设置时区、启用时间同步、配置 UTF-8 区域设置,以及为什么日志和数据库应保持为 UTC。

更新于 2026年8月23日

全新机器通常以 UTC 运行,并且只安装了最少的语言环境。只要您不查看日志、不运行计划任务,就不会察觉到任何问题。一旦涉及 cron、邮件和报表,时间和编码就会变得非常重要。

时区

timedatectl
timedatectl list-timezones | grep Moscow
timedatectl set-timezone Europe/Moscow

timedatectl 会显示本地时间、UTC 以及同步状态。System clock synchronized: yes 这一行表示时钟已通过网络完成同步。

如果同步处于关闭状态:

timedatectl set-ntp true
systemctl status systemd-timesyncd

在 AlmaLinux 和 CentOS Stream 上,通常由 chronyd 负责时间:

systemctl enable --now chronyd
chronyc tracking

语言环境

语言环境决定消息的语言、编码以及数字和日期的格式。最低要求是 UTF-8,否则俄语文件名和程序输出会变成问号。

Debian 和 Ubuntu:

apt install -y locales
dpkg-reconfigure locales
localectl set-locale LANG=ru_RU.UTF-8

AlmaLinux 和 CentOS Stream:

dnf install -y glibc-langpack-ru
localectl set-locale LANG=ru_RU.UTF-8

检查:

locale
locale -a | grep -i utf

更改只对新会话生效——请通过 SSH 重新登录。

控制台中的键盘布局

/hosting/vds/m/<id> 面板“控制台”标签页中的“屏幕”(VNC)视图会原样传递按键。如果您需要直接在那里输入西里尔字母:

localectl set-keymap ru

服务不需要这个——对它们来说 UTF-8 就足够了。

哪些内容应保留为 UTC

将系统本身和数据库保留为 UTC 是合理的,只向人展示本地时间。

  • UTC 格式的日志在不同机器之间可以相互比较,并且不会在时钟调整时发生跳变。
  • 使用 UTC 的数据库不会破坏时间间隔的计算。
  • Cron 按系统时区计算时间:如果您更改了时区,请重新检查所有计划。
systemctl restart cron
crontab -l

常见错误

现象原因解决方法
setlocale: LC_ALL: cannot change locale客户端发送了自己的语言环境,但服务器上并不存在生成该语言环境,或在客户端取消 LANG 转发
文件名出现乱码语言环境不是 UTF-8设置 LANG=ru_RU.UTF-8 并重新登录
时间“漂移”了几分钟同步处于关闭状态timedatectl set-ntp true
任务在错误的时刻运行您更改了时区,但计划保持不变重新计算 crontab

请在设置备份任务和日志之前更改时区。在正在运行的机器上,更改时区意味着需要一次性检查所有计划。