我想通过编辑重置时区/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
。