如何让 Ubuntu 时区更改生效?

如何让 Ubuntu 时区更改生效?

我想通过编辑重置时区/etc/timezone。然而,当我完成编辑并保存文件后,系统时间并没有相应改变。

另一方面,当我利用命令dpkg-reconfigure tzdata更改时区时,时间将立即更改。另外,该/etc/timezone文件也会进行相应修改。

编辑并保存配置文件后,为了让新时间生效,我缺少哪些步骤?

答案1

既然您发现它dpkg-reconfigure tzdata有效,为什么不使用它呢?

如果问题在于它是交互式的并且您想要编写更改脚本,那么这是可能的。时区是通过配置的德布会议。您可以使用以下命令设置值debconf-set-selections。然后重新配置包,告诉它不要提示任何内容。

debconf-set-selections <<EOF
tzdata tzdata/Areas select Europe
tzdata tzdata/Areas seen true
tzdata tzdata/Zones/Europe select Paris
tzdata tzdata/Zones/Europe seen true
EOF
dpkg-reconfigure -fnoninteractive tzdata

/etc/localtime应用程序在第一次需要时区信息时读取。这是由系统的标准库执行的,因此您不会发现很多异常(如果有的话)。/etc/localtime通常是指向 下文件的符号链接/usr/share/zoneinfo,或者此类文件的副本。大多数应用程序需要重新启动才能使该文件的更改生效。

该文件/etc/timezone包含时区的名称。通常/etc/localtime是 的链接或副本/usr/share/zoneinfo/$(cat /etc/timezone)/etc/timezone主要(仅?)由包装系统使用,这解释了为什么更改它没有任何明显的效果。

TZ请记住,您可以通过使用环境变量(例如 )启动特定应用程序来在特定应用程序中使用不同的时区TZ=Pacific/Tarawa date

答案2

看一下/var/lib/dpkg/info/tzdata.postinst,我认为这就是dpkg-reconfigure tzdata调用时正在运行的内容。

请特别注意以下命令,该命令在/etc/timezone更新后运行。

cp -f /usr/share/zoneinfo/$AREA/$ZONE /etc/localtime.dpkg-new && \
            mv -f /etc/localtime.dpkg-new /etc/localtime

因此,文件 /etc/localtime 需要更新。我还没有尝试过,但我的猜测是这是改变时区的重要一步。如果您自己进行了编辑,则尚不清楚tzdata维护者是否希望您手动进行此更改/etc/timezone

答案3

您也许可以service timezone restart手动运行以使此生效。这适用于几乎任何系统配置文件。文件更改后,任何依赖于这些配置的服务都需要重新启动。

更改文件/etc/timezone实际上就足够了,但您通常需要重新启动或至少再次登录才能生效。更改时区并不是系统制造商预期的事情,不足以使其成为经常重新读取的配置文件!

在某些情况下,由于首次登录时设置的环境变量,您还需要再次登录。例如,系统语言变量通常在登录时设置,更改配置文件不会影响已登录的用户。

答案4

我使用以下脚本询问用户要设置哪个时区,然后确认它确实已设置:

#!/bin/sh
sudo timedatectl set-timezone $(tzselect)
echo
echo timedatectl says:
timedatectl

我称之为tz-set

相关内容